[Twisted-Python] Callback blocked in event loop

Matt P 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 
me straight!

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 
eventFired(...) on.

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 mailing list