[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