[Twisted-Python] Problem: spawnProcess() never ending when installSignalHandlers=False

Jp Calderone exarkun at divmod.com
Sat Jun 11 11:35:37 EDT 2005


On Sat, 11 Jun 2005 11:08:12 -0400, Matt Feifarek <matt.feifarek at gmail.com> wrote:
>On 6/10/05, Itamar Shtull-Trauring <itamar at itamarst.org> wrote:
>> Register the same SIGCHLD handler twisted does in the main thread, that
>> should work (they need to be reentrancy-safe anyway so the fact it's
>> called from a different thread is fine). Possibly a more general
>> solution could be devised for this, anyone have suggestions?
>
>Thanks.
>
>So this behavior is by design? Again, it DID work before; for the last
>year or so, I've been using this code in production on a few servers.

Yep, and always has been.  If it ever worked, it was by accident (I really don't see how it could have, though, so I can't begin to guess what might have changed to stop it).

>
>Perhaps a note could be made in the docs that ProcessProtocol doesn't
>work in this case.
>
>This will make it pretty hard to integrate into other worlds. I'm not
>sure that I can over-ride the signal handling in Webware and register
>handlers. Other bits of python libraries might be the same way.
>
>I look forward to any "more general solution" that anyone can come up with!

Here's one:

  def reapChildren():
      from twisted.internet import reactor, task
      t = task.LoopingCall(reactor._handleSigchld, None, None)
      return t.start(5)

Of course, it uses a non-public method of reactor (but installSignalHandlers is a non-public argument to reactor.run(), so you're already treading on thin ice :)

Jp




More information about the Twisted-Python mailing list