Nob*_*ody 7 python exception-handling multiprocessing
我有一个Python程序,有几个进程(现在只有2个)和线程(每个进程2个).我想捕获每个异常,特别是在Ctrl + c上干净地关闭我的程序,但我无法让它工作.每次发生异常时,程序都会停止但不会正确关闭,从而使我无法使用命令行.
我到目前为止在伪代码中尝试过的是:
try:
for process in processes:
process.join()
except:
pass #Just to suppress error-messages, will be removed later
finally:
for process in processes:
process.terminate()
Run Code Online (Sandbox Code Playgroud)
但正如我已经说过没有运气.还要注意,我得到两个进程的异常错误消息,所以它们都停止了我相信吗?
也许我还应该提一下,大多数线程在监听管道时都被阻止了.
编辑
所以我几乎让它工作.我需要try:每个线程并确保线程正确连接.只有一个缺陷:Exception KeyboardInterrupt in <module 'threading' from '/usr/lib64/python2.7/threading.pyc'> ignored关闭时.这是在主进程的主线程中引发的.这个线程已经完成,这意味着它已经通过了最后一行代码.
问题(我期望)是异常是在进程内部而不是在连接调用中引发的。
我建议您尝试将每个进程的主要方法包装在 try- except 循环中。然后有一个标志(例如 multiprocessing.Value 的实例),将 except 语句设置为 False。每个进程都可以检查标志的值,如果标志设置为 False,则停止(自行清理)。
请注意,如果您只是终止一个进程,它不会自行清理,因为这与向其发送 SIG_TERM 相同。
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |