[Python-ideas] The async API of the future

Richard Oudkerk shibturn at gmail.com
Sat Nov 3 22:20:18 CET 2012


On 02/11/2012 11:59pm, Guido van Rossum wrote:
> Working code or it didn't happen. (And it should scale too.)

I have some (mostly) working code which replaces tulip's "pollster" 
classes with "proactor" classes for select(), poll(), epoll() and IOCP.  See

 
https://bitbucket.org/sbt/tulip-proactor/changeset/c64ff42bf0f2679437838ee7795adb85

The IOCP proactor does not support ssl (or ipv6) so main.py does not 
succeed in downloading from xkcd.com using ssl.  Using the other 
proactors it works correctly.

The basic interface for the proactor looks like

     class Proactor:
         def recv(self, sock, n): ...
         def send(self, sock, buf): ...
         def connect(self, sock, address): ...
         def accept(self, sock): ...

         def poll(self, timeout=None): ...
         def pollable(self): ...

recv(), send(), connect() and accept() initiate io operations and return 
futures.  poll() returns a list of ready futures.  pollable() returns 
true if there are any outstanding operations registered with the 
proactor.  You use a pattern like

     f = proactor.recv(sock, 100)
     if not f.done():
         yield from scheduling.block_future(f)
     res = f.result()

--
Richard




More information about the Python-ideas mailing list