[Twisted-Python] redefine signal handlers
gabriel.rossetti at arimaz.com
Wed Feb 4 11:19:43 EST 2009
Jean-Paul Calderone wrote:
> On Wed, 4 Feb 2009 10:32:19 +0000, Reza Lotun <reza at getpeer.com> wrote:
>> Hi Gabriel,
>> On Wed, Feb 4, 2009 at 10:15 AM, Gabriel Rossetti
>> <gabriel.rossetti at arimaz.com> wrote:
>>> Hello everyone,
>>> I would like to run some cleanup code when my Twisted app receives a
>>> I saw that "_SignalReactorMixin" sets the handlers and that
>>> defines the default handlers : ...
>>> My question is how can I redefine them, other than monkey patching or
>>> inheriting the reactor and over-riding them (which I'd rather not do
>>> some of my code uses the windows reactor when on windows since I was
>>> problems with windows event)? Is there such a mechanism, something like
>>> setDefaultSig("SIGINT, mySigIntHandler)?
>> One easy way to do it is to reactor.run(installSignalHandlers=False)
>> and then manually install your own signal handlers in the usual way
>> (using the python signal library).
> If you do this, you'll break spawnProcess. Fortunately, if you just
> install a SIGINT handler, Twisted won't stomp on it:
> exarkun at charm:~$ python
> Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) [GCC 4.2.3
> (Ubuntu 4.2.3-2ubuntu7)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> def f(*a):
> ... print 'sigint'
> ... >>> import signal
> >>> signal.signal(signal.SIGINT, f)
> <built-in function default_int_handler>
> >>> from twisted.internet import reactor
> >>> reactor.run()
> exarkun at charm:~$
Ok, this is what I have been doing, but I suspect that it is the reason
that my reactor won't stop sometimes (when SIGINT is sent). It usually
happens with code using threads or wxpython support. I was wondering if
my redefining handlers wasn't messing things up somehow...
More information about the Twisted-Python