[Twisted-Python] Callback blocked in event loop
twisted-list at zorinholdings.com
Fri Nov 10 10:24:51 EST 2006
I've got a bit of an issue that someone may recognise and bea ble to set
I have a twisted.spread server which, amongst other things, provides an
event pub/sub engine. The subscription manager and event publisher runs in
the twisted event loop: an event is posted onto a DeferredQueue and the
callback on that Queue iterates through listeners calling eventFired(...).
Some event listeners run in-server, but others are seperate processes
which register by calling the register function on the server and
providing a pb.Referenceable that the event publisher can call
Events may be raised in the server, as a twisted.pb call to fireEvent on
the server and also come in on a separate thread (from a JMS message
queue) and get posted onto the DefferedQueue for events.
If events are raised in the server, remote listeners get their
pb.Referenceable callback immediately. It works as I would like.
However, if a message comes in off the JMS bus, the DeferredQueue callback
gets called, it in turns calls the referenceable callback and nothing
happens. Only when the server handles *any* other Twisted event do the
event callbacks execute and my remote listeners get the message.
So, only in the case where teh DeferredQueue.put(...) is called from
another thread do I have the problem. I can't see why the blocking. Does
this behaviour make sense to anyone!?
Many thanks in advance for any help!!
More information about the Twisted-Python