我正在尝试运行以下代码(我简化了一点):
def RunTests(self):
from threading import Thread
import signal
global keep_running
keep_running = True
signal.signal( signal.SIGINT, stop_running )
for i in range(0, NumThreads):
thread = Thread(target = foo)
self._threads.append(thread)
thread.start()
# wait for all threads to finish
for t in self._threads:
t.join()
def stop_running(signl, frme):
global keep_testing
keep_testing = False
print "Interrupted by the Master. Good by!"
return 0
def foo(self):
global keep_testing
while keep_testing:
DO_SOME_WORK();
我希望用户按Ctrl C,程序将通过消息和中断来打印商品.但是,它不起作用.问题出在哪儿?
谢谢
解决方法:
与常规流程不同,Python似乎没有以真正的异步方式处理信号. “ join()”调用以某种方式阻止主线程,以防止其响应信号.我对此感到有些惊讶,因为我没有在文档中看到任何表明这种情况可能/应该发生的情况.但是,解决方案很简单.在主线程中,在线程上调用“ join()”之前添加以下循环:
while keep_testing:
signal.pause()
标签:multithreading,python,signals
来源: https://codeday.me/bug/20191209/2095855.html