signal and threading

~levon Levon.Ghazaryan at gmail.com
Mon Aug 25 16:54:59 EDT 2008


this seems to be the solution:
http://code.activestate.com/recipes/496735/

On Aug 25, 3:37 pm, "~levon" <Levon.Ghazar... at gmail.com> wrote:
> Hello group,
>
> in following example, a signal handler is registered and a thread
> started. if I call self.doSomethin() directly
> the code works as I would expect. as i send a SIGINT shutdown is
> called and the script terminates.
>
> as soon as I call doSomething() in a thread the the SIGINT handler is
> never called again and
> i have to terminate the script with a SIGTERM or SIGKILL.
>
> well, i would expect the handler to be called in both cases, am i
> missing something?
>
> by the way. calling os.kill(os.getpid(), signal.SIGINT) works as I
> would expect, what
> don't is kill -s SIGINT pid # where pid is the actual process id
>
> the code:
>
> class Runner(object):
>     def __init__(self):
>         print os.getpid()
>         self.shd = False
>         signal.signal(signal.SIGINT, self.shutdown)
>         threading.Thread(target=self.doSomething).start()
>         # the following works fine:
>         #os.kill(os.getpid(), signal.SIGINT)
>
>     def doSomething(self):
>         while not self.shd:
>             pass
>
>     def shutdown(self, signo, frm):
>         self.shd = True
>
> if __name__ == '__main__':
>     Runner()
>
> ~levon




More information about the Python-list mailing list