[Twisted-Python] spawnProcess - reapProcess not retrying on failures

Adi Roiban adi at roiban.ro
Wed Sep 3 09:27:05 MDT 2014


On 3 September 2014 14:39,  <exarkun at twistedmatrix.com> wrote:
> On 01:05 pm, adi at roiban.ro wrote:
>>
>> On 2 September 2014 14:50,  <exarkun at twistedmatrix.com> wrote:
>>>
>>> On 01:38 pm, jmp at editshare.com wrote:
>>>>
>>>>
>> [snip]
>>>>
>>>>
>>>> Without my workaround, I continue to have the problem with the
>>>> gtk2reactor.
>>>
>>>
>>> Have you reported this bug?
>>>
>>> Jean-Paul
>>
>>
>> In my initial use case, signal handlers were not installed since I
>> wanted a custom behaviour for SIGINT, SIGTERM, SIGBREAK so that I can
>> use my custom Unix Daemon and Windows Service adapters.
>>
>> I understand why reactor.run has the installSignalHandlers argument.
>>
>> Do you think it would make sense to have some kind of public API which
>> would skip handlers for SIGINT, SIGTERM, SIGBREAK (as they only do
>> reactor.stop())  but would install the SIGCHLD handler?
>
>
> Yes.  Providing more fine-grain control over signal handlers would be a fine
> improvement.

Do you have any suggestion for how the calls should be made?

reactor.run(installSignalHandlers=True,  installStopHandlers=False)

or

reactor.installStopHandlers = False
reactor.run()


> Another fine improvement would be making child processes work even if a
> SIGCHLD handler cannot be installed (for example, by polling children
> periodically, by using wait() in a sidecar process, or by using a better
> system-specific child process monitoring API (eg kqueue's EVFILT_PROC)).
>

I see that GlibReactorBase inherits from PosixReactorBase so it should
install the SIGCHLD handler... this should not be the reason why gtk2
reactor don't work.

As a poor man's fix and Unix independent fix maybe we can call
reapAllProcess in a task.LoopingCall...
What are the reasons why SIGCHLD handler cannot be installed?

I am asking since I hope it could help me understant where and how to
enable the poor man's fix... and how to fill the bug report.

 kqueue's EVFILT_PROC would be great, but I guess that we still need a
general fix

---------

For the record: Right now, to ignore SIGINT, SIGTERM, SIGBREAK handles
but keep SIGCHLD I do:

# Patch base reactor to not install SIGINT, SIGTERM and SIGBREAK handlers
_SignalReactorMixin._handleSignals = lambda self: None
reactor.run()


-- 
Adi Roiban




More information about the Twisted-Python mailing list