Mar*_*vac 16 python multithreading signals sigint
使用线程模块和Thread()类时,无法捕获SIGINT(控制台中的Ctrl + C).
为什么,我该怎么办?
简单的测试程序:
#!/usr/bin/env python
import threading
def test(suffix):
while True:
print "test", suffix
def main():
for i in (1, 2, 3, 4, 5):
threading.Thread(target=test, args=(i, )).start()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
尝试按Ctrl-C - 没有任何反应.
Tho*_*ers 10
线程和信号不会混合.在Python中,这种情况比外部情况更多:信号只能传递到一个线程(主线程); 其他线程不会收到消息.除了主线程之外,你无法中断线程.他们不受你的控制.
您可以在这里做的唯一事情是使用queue模块在主线程和您启动的任何线程之间引入通信通道.然后,您可以向线程发送消息,并在看到消息时终止(或执行您想要的任何其他操作).
或者,它通常是一个非常好的选择,是不使用线程.然而,使用什么在很大程度上取决于你想要达到的目标.