E
exhuma.twn
Unfortunately I don't have the code at hand on this box, but maybe
someone can give me a nudge in the right direction.
Some background: Last year I began to write a jukebox system that
provided a Telnet-like interface. I wrote this using "socket". Later
along the path I discovered Twisted, and due to various other
problems, a re-write made sense. So I decided to use Twisted. The only
thing I adapted was the class providing the telnet interface. In the
background I use a few other threads. One for metadata-scanning, one
for assuring continuous playback (periodic checks the player status
and appends songs if necessary) and in the case the shoutcast backend
is activated, there is also a built-in player thread.
I remember having it running already, but I don't remember if it was
before I started to use Twisted or after.
Well, I beleive the problem lies withing the last named thread. This
one uses shoutpy to stream data to the shoutcast server. 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.
I saw that there is another package called "python-shout". But neither
that nor "shoutpy" have any comprehensive documentation which might
tell me anything about the libshout blocking problem. The
documentation of libshout revealed a "non-blocking" mode, but even
though I made the necessary adjustments to the code, I still had the
same problem.
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. Maybe the
combination of all this with Twisted is an unlucky marriage but I
would be disappointed to be told: "Nope, won't be possible"
Maybe Twisted's deferreds to the rescue? I don't know... I'm still
quite green with Twisted
someone can give me a nudge in the right direction.
Some background: Last year I began to write a jukebox system that
provided a Telnet-like interface. I wrote this using "socket". Later
along the path I discovered Twisted, and due to various other
problems, a re-write made sense. So I decided to use Twisted. The only
thing I adapted was the class providing the telnet interface. In the
background I use a few other threads. One for metadata-scanning, one
for assuring continuous playback (periodic checks the player status
and appends songs if necessary) and in the case the shoutcast backend
is activated, there is also a built-in player thread.
I remember having it running already, but I don't remember if it was
before I started to use Twisted or after.
Well, I beleive the problem lies withing the last named thread. This
one uses shoutpy to stream data to the shoutcast server. 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.
I saw that there is another package called "python-shout". But neither
that nor "shoutpy" have any comprehensive documentation which might
tell me anything about the libshout blocking problem. The
documentation of libshout revealed a "non-blocking" mode, but even
though I made the necessary adjustments to the code, I still had the
same problem.
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. Maybe the
combination of all this with Twisted is an unlucky marriage but I
would be disappointed to be told: "Nope, won't be possible"
Maybe Twisted's deferreds to the rescue? I don't know... I'm still
quite green with Twisted