Most "active" coroutine library project?

Jason Tackaberry tack at
Wed Sep 23 23:40:50 CEST 2009

On Wed, 2009-09-23 at 20:50 +0000, exarkun at wrote:
> immediately outside the generator.  This means that you cannot use 
> "enhanced generators" to implement an API like this one:
>     def doSomeNetworkStuff():
>         s = corolib.socket()
>         s.connect(('', 80))
>         s.sendall('GET / HTTP/1.1\r\nHost:\r\n\r\n')
>         response = s.recv(8192)
> where connect, sendall, and recv don't actually block the entire calling 
> thread, they only switch away to another coroutine until the underlying 
> operation completes.  With "real" coroutines, you can do this.

I might be missing some subtlety of your point, but I've implemented
this functionality using generators in a library called Kaa[1].  In kaa,
your example looks like:

        import kaa
        def do_some_network_stuff():
           s = kaa.Socket()
           yield s.connect('')
           yield s.write('GET / HTTP/1.1\nHost:\n\n')
           response = yield

Of course, it does require a "coroutine scheduler" be implemented,
which, in kaa, is taken care of by the main loop.


[1] The curious can visit and although a 1.0 hasn't yet been released and the
docs are still rather sketchy.

More information about the Python-list mailing list