libev loop in a Python thread

Jonas H. jonas at lophus.org
Sun Jun 6 22:18:34 CEST 2010


hello there,

I have written a small standalone Python web server in C using libev.
I want to run it within a Python thread to make it possible to share 
memory easily.

Unfortunately it seems like the thread that runs the libev mainloop 
blocks any other Python thread:  Once the libev loop has been started, 
code in other threads won't be executed any more.  If I send a request 
to the server -- so the libev thread leaves the libev loop code and 
enters my web server C code -- other Python threads' code is executed. 
Until the C code re-enters the libev code.

I tried threading priorities, but that didn't change anything.
Changing the backend doesn't change anything, either (I tried epoll and 
select).

I debugged around a little bit and found out that the other Python 
threads all stop some mystic `sem_wait`.  Not that this is something to 
worry about -- but could it be that something deadlocks there?  Or is it 
just libev that doesn't give the poor(ly implemented) Python interpreter 
a chance of taking back control? ;-)

I'm glad about any suggestions on how to fix this stuff.

Thanks!

     Jonas


PS: If you want code:

   git clone git://github.com/jonashaag/bjoern
   cd bjoern
   make get-http-parser
   make
   python tests



More information about the libev mailing list