It looks like I am reinventing Twisted and/or Kamelia. This is code I wrote just today to simulate Python 2.5 generator in current Python:
import Queue class coroutine(object): def __init__(self, *args, **kw): self.queue = Queue.Queue() self.it = self.__cor__(*args, **kw) def start(self): return self.it.next() def next(self): return self.send(None) def __iter__(self): return self def send(self, *args): self.queue.put(args) return self.it.next() def recv(self): return self.queue.get() @classmethod def generator(cls, gen): return type(gen.__name__, (cls,), dict(__cor__=gen)) @coroutine.generator def consumer(self, N): for i in xrange(N): yield i cmd = self.recv() if cmd == "exit": break c = consumer(100) print c.start() for cmd in ["", "", "", "", "exit"]: print c.send(cmd) Michele Simionato -- http://mail.python.org/mailman/listinfo/python-list