On Wed, Jan 12, 2011 at 11:32 AM, Glyph Lefkowitz <gl...@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/
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python