Opposite of yield?
Oren Tirosh
oren-py-l at hishome.net
Thu Sep 11 03:17:09 EDT 2003
On Wed, Sep 10, 2003 at 12:40:37PM -0700, achrist at easystreet.com wrote:
> The yield statement looks to be a big step toward some kind of
> lightweight concurrency-oriented programming in python. Is there
> any similarly nice way to do the opposite of yield, just sit around
> (perhaps in the middle of a loop) and wait until some other routine
> (unknown to the waiting module) hurls a value in?
Here is a way of converting a generator function into a consumer using
a single item list as a mailbox:
from __future__ import generators
def consumer():
print "This code runs before any data is fed to the consumer"
mailbox = []; yield mailbox
while mailbox:
print "Here's what I got:", mailbox.pop()
yield mailbox
print "This code runs after end of data is signalled"
# How to feed a consumer:
i = 0
for mailbox in consumer():
if i < 5:
mailbox.append(i) # feed next item
i += 1
Output:
This code runs before any data is fed to the consumer
Here's what I got: 0
Here's what I got: 1
Here's what I got: 2
Here's what I got: 3
Here's what I got: 4
This code runs after end of data is signalled
For a more comprehensive solution try Christian Tismer's Stackless Python.
Oren
More information about the Python-list
mailing list