[Twisted-Python] Re: flow.Zip
Clark C. Evans
cce at clarkevans.com
Wed Apr 23 09:48:23 MDT 2003
Actually, the diagram isn't quite right. Here is a better one.
Suppose you have generator X -> Y -> Z, the picture
then looks like...
Wrap <-- Z
\
\
\
v
Wrap <-- Y
\
\
\
v
Wrap <-- X
|
V
Deferred
|
V
reactor
| So, rather than X talking to Y, talking to Z, each of
| your generators is talking to a wrapper instead, which
| tries to be as transparent as possible. The
| wrapper has the following behavior:
|
| 0. If a value is returned from a generator to
| a wrapper, it is given to the previous generator
| in the chain; at the bottom of the chain it is
| added to an array which is sent to the deferred's
| callback. Failures are handled the same way.
|
| 1. If the value returned is a wrapper, then it adds
| the new wrapper to the top of the stack and
| starts to process it.
|
| 2. When Cooperate is returned from a generator,
| it is sent all the way down the Wrapper linked
| list so that the reactor can re-schedule the
| processing chain (micro-thread).
More information about the Twisted-Python
mailing list