gpt4 book ai didi

python - 如何在异常后干净地停止多进程 python 程序?

转载 作者:太空狗 更新时间:2023-10-29 21:58:59 35 4
gpt4 key购买 nike

我有一个 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()

但正如我已经说过的那样,运气不好。另请注意,我收到了两个进程的异常错误消息,所以我相信它们都已停止?

也许我还应该提一下,大多数线程在监听管道时都被阻塞了。

编辑所以我几乎让它工作了。我需要 try:每个线程并确保线程正确连接。只有一个缺陷:Exception KeyboardInterrupt in <module 'threading' from '/usr/lib64/python2.7/threading.pyc'> ignored关机时。这是在主进程的主线程中引发的。该线程已经完成,这意味着它已经通过了最后一行代码。

最佳答案

问题(我预计)是异常是在进程内部引发的,不是在连接调用中。

我建议您尝试将每个进程的主要方法包装在 try-except 循环中。然后有一个标志(例如 multiprocessing.Value 的一个实例)except 语句设置为 False。如果设置为 False,每个进程都可以检查标志的值并停止(自行清理)。

请注意,如果您只是终止一个进程,它不会自行清理,因为这与向它发送 SIG_TERM 是一样的。

关于python - 如何在异常后干净地停止多进程 python 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7560230/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com