我正在处理一个python项目,我希望我的线程与C
中的行为相同。在C
主线程退出时,它会杀死所有其他线程。
该项目包含一个TCP
错误服务器,用于从其他线程和其他软件获取日志。TCP
链接是单工的。
有些错误必须涉及整个程序的结束。
PID
sys._exit()
的其他主题,有时会有效,有时会留下一些主题。如果我的其他线程正在循环,我可以使用semaphore
或类似的东西,但它只是线性过程的一次迭代。
我已经考虑过设计模式Producer/Consumer
或者添加了很多lock.acquire()/lock.release()
,但我认为它会增加更多的复杂性,这意味着打破线性线程。
我已经查看了其他Stackoverflow
问题,我发现了这些解决方案:
sys._exit()
,但其成功率不是100%。subprocess
以轻易杀死他们,但就我而言,我无法做到。我正在寻找解决方案,设计模式或其他解决方法。
PS:我是一个C
爱好者,每次我处理Python时,我认为解决方案就像调用exit()
来杀死我的所有线程一样简单。
答案 0 :(得分:1)
如果您创建了工作线程守护程序线程,那么当所有非守护程序线程(例如主线程)退出时,它们将会死亡。
http://docs.python.org/library/threading.html#threading.Thread.daemon
线程守护程序状态isDaemon()
为False
,按True
setDaemon(True)
另一个解决方案:
要使线程在键盘中断信号(ctrl + c)上停止,你可以捕获异常" KeyboardInterrup"退出前清理。像这样:
try:
start_thread() #And the rest of your main
except (KeyboardInterrupt, SystemExit):
cleanup_stop_thread();
sys.exit()