Python + Shoutpy + Twisted Locks

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri Oct 5 22:21:12 EDT 2007


En Fri, 05 Oct 2007 04:55:55 -0300, exhuma.twn <exhuma at gmail.com> escribi�:

> [...] What I found
> is that "libshout" is blocking, which should be fine as the whole
> thing runs in it's separate thread. But the application hangs
> nevertheless while streaming. This effectively blocks out the other
> thread that checks the player status, which then fails to append new
> songs to the queue. So only one song is played when streaming.
>
> The other threads in my application run fine and don't block the rest
> of the app. So I guess, that the main problem is that blocking occurs
> "outside" the python world and "inside" the libshout world.

Only one thread at a time may be executing Python code; the Global  
Interpreter Lock (GIL) ensures the mutual exclusion. Extension modules  
(written in C) may use the macros  
Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS to release/acquire the GIL  
before/after an external blocking call.
I don't know libshout, or how you are doing the binding python-libshout,  
but if your analysis is correct it means that the code is not releasing  
the GIL at the appropiate points.

-- 
Gabriel Genellina




More information about the Python-list mailing list