Hi All, 

I have the following code which when executed waits to be interrupted by 
SIGINT, SIGTERM or SIGQUIT. When an object is initialized, it creates a 
threading.Condition() and acquires() it! The program then registers the signal 
handlers where notify() and release() is called when the above mentioned 
signals are received. After registering the signal handlers, it calls wait() on 
the condition variable and block.

When I tried to stop the program with Ctrl-C, its did not respond. IOW, the 
_signal_handler() method did not get called.  

# start

from signal import signal, SIGINT, SIGTERM, SIGQUIT
from threading import Condition

class A:
    def __init__(self):
        self._termination_signal = Condition()
        self._termination_signal.acquire(blocking=0)

    def _signal_handler(self, signum, frame):
        print "Received terminate request - signal = {0}".format(signum)
        del frame
        self._termination_signal.notify()
        self._termination_signal.release()
        return

    def register_and_wait(self):
        signal(SIGINT, self._signal_handler)
        signal(SIGTERM, self._signal_handler)
        signal(SIGQUIT, self._signal_handler)
        print "Waiting to be interrupted!"
        self._termination_signal.wait()      # control blocks here!
        print "Notified!!"

def main():
    a = A()
    a.register_and_wait()

if __name__ == "__main__":
    main()

# end

What am I doing wrong?! 

Thank you,

Sangeeth
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to