【发布时间】:2011-11-25 11:46:21
【问题描述】:
我有一个 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。这是在主进程的主线程中提出的。这个线程已经结束了,意味着它已经通过了最后一行代码。
【问题讨论】:
-
大概主进程中的主线程是您等待加入所有其他进程(和线程)的地方。那正确吗?如果是这样,那么它应该总是最后完成。你是按 CTRL-C 来提高 KeyboardInterrupt 吗?如果是这样,那么您最好使用信号处理程序来捕获 SIG_INT 并指示您的其他线程和进程终止。
标签: python exception-handling multiprocessing