我有一个无限循环,该循环会定期检查threading.Event是否为set。我也有一个处理中断的信号处理程序。我的目标是避免发生任何死锁。死锁下面的代码可以吗?
我使用python 2.7(很快将升级到3),重点是cpython和Linux。浏览了线程,多处理,信号模块的文档。 已经了解并了解以下资源:
我知道,如果我的定期逻辑将在其专用线程上运行,它将不会死锁。我对在同一线程上尝试在同一实例上调用Event.set()的Event.is_set调用被中断的情况特别感兴趣。
from threading import Event
import sys
import signal
stop_event = Event()
def handle_interrupt(signum, frame):
if stop_event.is_set():
# agressive exit
sys.exit()
else:
stop_event.set()
signal.signal(signal.SIGINT, handle_interrupt)
try:
while not stop_event.is_set():
# do some stuff using only this thread's context
time.sleep(4)
# final operations
except SystemExit:
# quickly tear down and log everything critical
pass
房间里的大象:我猜Event.set()实现使用threading.Lock对象。 Event.is_set()也锁定了吗?