Signal handler doesn`t handle any signals while main thread is blocked

Chris cwitts at gmail.com
Mon May 26 09:20:37 EDT 2008


On May 26, 2:26 pm, "Grzegorz Kokosiński" <g.kokosin... at gmail.com>
wrote:
> Hi!
> I waste a lot of my time figuring why this snip of code doesn`t work.
> And still without any solution ;/
> Does anybody know why this handler cannot handle SIGINT signal? What
> did I wrong?
>
> Thanks in advance.
>
> #
> # CODE
> #
> import signal
> from threading import *
>
> def siginthandler(signum, frame):
>      global work,cv
>      print 'terminating...'
>      cv.acquire()
>      work = 0
>      cv.notifyAll ()
>      cv.release()
>
> work = 1
> signal.signal (signal.SIGINT, siginthandler)
>
> print 'wait for SIGINT signal'
> cv = Condition ()
> cv.acquire()
> while work:
>     print 'waiting...'
>     cv.wait()
> print 'woke up'
> cv.release()
>
> print 'terminated'

change cv.wait() to cv.wait(delay) and it will capture the terminate
request and wrap the cv.wait(delay) in a try/except IOError: break
block.



More information about the Python-list mailing list