我试着运行下面的代码(我做了一点简化):
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,程序将通过消息和中断打印商品。然而,它并不起作用。问题出在哪里?
谢谢
发布于 2010-10-28 21:03:25
与常规进程不同,Python似乎不会以真正异步的方式处理信号。'join()‘调用以某种方式阻塞了主线程,阻止了它对信号的响应。我对此感到有点惊讶,因为我在文档中没有看到任何表明这可以/应该发生的东西。然而,解决方案很简单。在主线程中,在线程上调用'join()‘之前添加以下循环:
while keep_testing:
signal.pause()发布于 2010-10-28 21:01:48
从threading docs
可以将线程标记为“守护进程线程”。这个标志的意义在于,当只剩下守护进程线程时,整个Python程序就会退出。初始值继承自创建线程。可以通过daemon属性设置该标志。
您可以在调用start()之前尝试设置thread.daemon = True,看看这是否能解决您的问题。
https://stackoverflow.com/questions/4042158
复制相似问题