Stackless Python and Python 2.x
Gordon McMillan
gmcm at hypernet.com
Sun Sep 2 08:06:48 EDT 2001
[Joal Heagney]
>> Wasn't a big part of the generator addition that it supplies a
>> simpler-to-understand solution to the majority of continuations
>> solutions?
[Tim Peters]
> I expect that if you dug into all the applications using Stackless,
> you'd find that the majority of them rely on full-blown coroutines or
> microthreads. It's unclear how far PEP 255's "Simple Generators" can
> be pushed towards those specific ends.
Alas, not far enough. I've used Stackless a number of times to
turn state machines inside out (where the number of events is
smallish but the state stuff is complex, this is a wonderful
simplification). Generally this means that there's a whole
set of frames hanging around when I "yield".
To the non-coroutine aware, this is better explained from a
thread POV - I have a bunch of "threads" that are dispatched
when an event is received, and only swap out when they want to.
The advantages over real threads are enormous:
- lightweight
- system level locks never needed
- user level locks rarely needed
The only downside is relatively minor - I have to make
sure that one "thread" doesn't monopolize the CPU.
> Neil Schemenauer discovered that it was possible to code the
> "traditional" coroutine examples using simple generators instead...
Yah, well your "traditional" thread example prints the numbers
1 through 10 twice in some interleaving...
- Gordon
More information about the Python-list
mailing list