En Fri, 05 Oct 2007 04:55:55 -0300, exhuma.twn <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list