下面的代码可以正常工作,即,按CTRL-C时,程序会先打印“信号”,然后“退出并最终终止”:
from threading import Event
import signal
if __name__ == '__main__':
e = Event()
def handler(n, f):
print('Signal')
e.set()
signal.signal(signal.SIGINT, handler)
while not e.is_set():
e.wait(3)
print('Exit')
但是,如果我们将from threading import Event
替换为from multiprocessing import Event
,则该程序将无法再运行。按下CTRL-C但未设置e
并且程序从不退出(必须被杀死)时,它仍会打印“信号”。
用于multiprocessing.Event()的documentation很稀缺:
class multiprocessing.Event
threading.Event的克隆。
是错误还是可以从Python文档中推断出这种现象?我在Centos7上运行Python 3.6