[Stackless] Stackless and Pyrex efficiently
Kristján Valur Jónsson
kristjan at ccpgames.com
Wed Jan 27 18:40:15 CET 2010
This looks like a continuation. But what's more, you are combining two things into one:
1) the schedule call and
2) when woken up, you want to discard the stack and softswitch into some toplevel call.
I don't understand the reason for 2. Why not simply "return" up whatever callstack placed you in this position in the first place?
Also, 2 is not safe. You might be discarding python state essential to the tasklet. It is only possible to discard a c stack in a select few places in stackless. Look for "stackless_schedule_return()" in the source code.
Don't be afraid of c stack switching. It is really fast.
K
> -----Original Message-----
> From: stackless-bounces at stackless.com [mailto:stackless-
> bounces at stackless.com] On Behalf Of Péter Szabó
> Sent: 27. janúar 2010 17:14
> To: The Stackless Python Mailing List
> Subject: Re: [Stackless] Stackless and Pyrex efficiently
>
> > If you are doing tasklet switching from C, there is no avoiding the
> hard switching.
>
> Thanks for this information. I'd be happy with a custom hack like this:
>
> def Wake(self): # defined in Python (or C)
> print 'Wake'
> ...
>
> void MyCFunction() {
> // This will discard the bottommost C stack, and it will call Wake
> as soon as the tasklet is rescheduled.
> PyStackless_ScheduleAndContinueWith(None, 1, Wake)
> }
>
> _______________________________________________
> Stackless mailing list
> Stackless at stackless.com
> http://www.stackless.com/mailman/listinfo/stackless
More information about the Stackless
mailing list