KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a threaded Python daemon. Like any good daemon, it wants to launch all of its worker threads, then wait around until it's told to terminate. The normal signal for termination is SIGTERM , and in most languages I'd hold to terminate by waiting on an event or mutex, so using threading.Event made sense to me. The problem is that Python's Event object and Unix signals don't appear to be playing well together. This works as expected, terminating on SIGTERM : import signal import time RUN = True def handle(a, b): global RUN print "handled" RUN = False signal.signal(signal.SIGTERM, handle) while RUN: time.sleep(0.250) print "Stopping" but this results in no SIGTERM being delivered (i.e., quite apart from quitting, "handled" never gets printed): import signal import threading RUN_EVENT = threading.Event() def handle(a, b): print "handled" RUN_EVENT.set() signal.signal(signal.SIGTERM, handle) RUN_EVENT.wait() print "Stopping" So my question is: Am I misusing threading.Event in some way? If I am not, is there an alternative other than the poll-and-sleep mechanism from the first example? Also if I am not, why does using threading.Event kill the signal handler?
Tags (comma-separated)
Save Edits
Cancel