我正在尝试运行以下代码(我对其进行了一些简化):
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()
关于python - 如何中断python多线程应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042158/