[Python-ideas] The async API of the future

Sam Rushing sam-pydeas at rushing.nightmare.com
Tue Nov 6 20:43:57 CET 2012

On 11/6/12 7:41 AM, Ben Darnell wrote:
> Yes.  When the server processes a request and switches from listening
> for readability to listening for writability, with epoll it's one call
> directly into the C module to set the event mask for the socket.  With
> kqueue something in the IOLoop must store the previous state and
> generate the two separate actions to remove the read listener and add
> a write listener.

Does that mean you're not using EV_ONESHOT?

>  I misspoke when I mentioned system call; the difference is actually
> the amount of python code that must be run to call the right C
> functions.  This would get a lot better if more of the IOLoop were
> written in C.

That's what we did with shrapnel, though we split the difference and
wrote everything in Pyrex.

> True, although whenever I've tried to be clever and batch up kevent
> calls I haven't gotten the performance I'd hoped for because system
> calls aren't actually that expensive in comparison to python opcodes.

And yeah, of course all this is dominated by time in the python VM...
Also, you still have to execute all the read/write system calls, so it
only cuts it in half.


More information about the Python-ideas mailing list