[Python-Dev] Stackless Python

Phillip J. Eby pje at telecommunity.com
Tue Jun 1 12:21:00 EDT 2004


At 06:34 AM 6/1/04 -0700, Guido van Rossum wrote:
> > It is most probably possible to implement soft-switchign in Jython.
>
>That's a rather vague statement; I'd like to hear from Samuele about
>that.

Me too.  The only thing I've heard of in Java that does lightweight 
co-operative task switching, is actually implemented using a Java VM 
written in Java.  Sort of like PyPy, only I guess you'd call it 
JavaJava.  :)  I don't remember the name of it right off, just that it was 
a commercial product that claimed they had a patent pending.


> > No idea what you mean by arbitrary exceptions (I never had that)
>
>I meant exceptions to the general rules.  Like, you can't depend on
>tasklet switching when you use one of these extensions, or one of
>these built-ins, or ...

Perhaps it would be better if it were defined in terms of where it *does* 
work, rather than where it doesn't.  For example, one can write 
co-operative multitasking code in CPython now using generators...  but it 
only works if you have "generators all the way down".  That is, any code in 
a task that calls a generator must itself be a generator.  That's a pretty 
comprehensible rule, albeit draconian to follow.  Adding soft-switching 
would change the rule to be, "you can switch as long as you haven't been 
called from C code."  That is, you haven't been called from *any* built-in 
or extension module.

Speaking as someone who's written some significant event-driven 
co-operative multitasking code using generators, I would say that going 
from "generators all the way down" to "Python all the way down" would be a 
huge improvement in flexibility.


> > On the latter: Well, this is a pure interface issue. I don't say
> > that everybody must love tasklets, there are other approaches and
> > interfaces possible.  But they all rely on the non-recursive
> > interpreter core, and that's the point, IMHO.
>
>Is it really just tasklets that the users want?

I am not currently a Stackless user, but if I were to try it, tasklets 
would be my primary interest.  I don't actually think that the higher 
recursion limit is a "feature", for two reasons: 1) Python loops run a lot 
faster than function calls, and 2) every time I've ever gotten an error 
from excessive recursion, it was because I'd accidentally created an 
infinite recursion.  So, to me, lifting the default recursion limit in 
standard Python would be a really *bad* idea.

The other feature besides tasklets that I find potentially interesting is 
thread pickling.  I'm intrigued by the possibility of using them to create 
"long-running tasks".  That is, workflow using Python scripts to define the 
loops, branches, etc. of the workflow.   But to make a really practical 
workflow system based on this, one would have to have a way of dealing with 
changes to the code that the running workflows were based on, so I don't 
know if that whole idea is really worth pursuing.  I would probably be 
better off basing such an animal on PyPy, because performance for the code 
in a long-running process workflow is a non-issue.

Anyway, I don't know about "the users" in general, but for me at least 
tasklets are where it's at.  :)  And I only care about explicit yielding, 
not thread-like concurrency.  (IOW, I don't want Stackless doing the 
scheduling, I'd want to be able to write my own scheduler, in pure Python.)


> > I understood it more like the more advanced question "why does
> > Python still block itself from lightweight threading by keping state
> > on the C stack".
>
>IMO mostly because Python wants to be friendly to extensions written
>in C or C++, including those that frequently call back into Python.

That would only disable task-switching within the called Python code, not 
from the code that called the extension.  And that, only if the 
hard-switching module wasn't available.




More information about the Python-Dev mailing list