global interpreter lock

Michele Simionato michele.simionato at gmail.com
Thu Sep 15 11:03:09 EDT 2005


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




More information about the Python-list mailing list