当中断Event.is_set()时,Python信号处理程序会导致死锁调用Event.set()吗?

时间:2019-06-13 15:56:31

标签: python signals

我有一个无限循环,该循环会定期检查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()也锁定了吗?

0 个答案:

没有答案