[Twisted-Python] client connecting to 2 servers (nonsimultaneously)

Jason Rennie jrennie at gmail.com
Wed Jan 12 13:45:47 EST 2011


On Wed, Jan 12, 2011 at 11:32 AM, Glyph Lefkowitz
<glyph at twistedmatrix.com>wrote:

> The reactor doesn't have a queue of tasks to be completed.  It has sets of
> various event sources, which it executes in no particular order.
>

"queue of tasks" was a guess on my part, but I looked through the
BaseReactor code and found something like that.  'course, I could easily be
reading the code wrong.  How would you describe threadCallQueue?  When I
said "tasks", I meant something akin to "calls".  That could be
confusing---did you interpret "tasks" differently?


> Scheduling a timed event with callLater(0,...) might do what you want,
> though.
>

Yes.  Thanks!  I see that the callFromThread documentation even recommends
using callLater for this behavior. (doh!)

http://twistedmatrix.com/documents/10.2.0/api/twisted.internet.interfaces.IReactorThreads.html#callFromThread

>>> from twisted.internet import reactor
>>> def foo():
...     print "foo!"
...
>>> def bar():
...     reactor.callLater(0, foo)
...     print "bar!"
...
>>> reactor.callWhenRunning(bar)
('startup', ('after', <function bar at 0x2c84320>, (), {}))
>>> reactor.run()
bar!
foo!

Interesting that you can substitute callFromThread for callLater(0, ...) in
the above code and get the same behavior...

Sorry to prolong the tangent, but I'd like to better understand the
differences between callWhenRunning, callFromThread and callLater.  I think
reactor.wakeUp() is the one missing piece for me.  How exactly does it work?
 Reading the BaseReactor code... callFromThread adds the call to a queue,
then calls wakeUp.  IIUC, wakeUp simply runs

self.port.postEvent(0, KEY_WAKEUP, None)

Does this cause the reactor thread to jump to the front of the queue of
threads to be run by python/linux?  If there were no wakeUp in
callFromThread, would the call simply be delayed until the thread
round-robin got to the reactor thread?  Or, without wakeUp, is it possible
the callFromThread call would never be made?

Cheers,

Jason

-- 
Jason Rennie
Research Scientist, ITA Software
617-714-2645
http://www.itasoftware.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20110112/80cb849d/attachment.htm 


More information about the Twisted-Python mailing list