[Twisted-Python] at what point does reactor.run() need to be called?

Bob Ippolito bob at redivi.com
Tue Apr 6 08:32:34 MDT 2004


On Apr 6, 2004, at 6:01 AM, Michal Pasternak wrote:

> Damon Fasching [Mon, Apr 05, 2004 at 11:39:57PM -0700]:
>> The following two modules work fine together.
>
> reactor.run() enters an event-controlled loop (it's the same as 
> "mainloop"
> in GUI toolkits you could program in), so you should call it after you 
> do
> all initialization stuff.
>
>> However, if the call to reactor.run() is moved any
>> higher in client.py, the client seems to hang.  For
>
> It doesn't hang, it just gets the root object, but has no callback to 
> pass
> it to.
>
> If it hangs (locks-up hard), it's a bug, examine & report it.

I wouldn't say that "locks-up hard" in this particular scenario (the 
reactor isn't supposed to be doing anything) is always a bug -- at 
least in the case of an alternative reactor implementation.  If you 
send a signal (such as SIGINT or ctrl-C) to the program, and Python 
swallows it (as it normally would), the not-written-in-Python event 
loop won't know that it would be a good idea to run some Python code, 
so it will never quit.  If you really want to guarantee that your 
program is indeed interruptible you should add a little "waker" that 
runs Python code (even if it's little more than "pass") every few 
seconds via callLater.

This was an issue until very recently with cfreactor.  However, I have 
written a new signal handler (in PyObjC CVS) that is installed by 
default (when you use AppHelper.run[Console]EventLoop) that uses a mach 
port to wake the not-written-in-Python event loop and runs some Python 
code immediately.  So it's no longer a problem when you are using 
PyObjC to start your event loop in the recommended way, or you install 
the mach port signal handler manually (it registers to the 
CoreFoundation runLoop, which cfreactor uses if you do not specify one 
to reactor.run or you do not have an NSApplication instance created).

-bob





More information about the Twisted-Python mailing list