在 python 中,如何检查子进程是否正常退出或出错?

In python, how can I check if a child process exited cleanly or with an error?

我有一些这样的代码

import multiprocessing as mp

processes = []
for i in range(10):
  p = mp.Process(target=my_func, args=args)
  processes.append(p)
  p.start()

for p in processes:
  p.join()

如果 my_func 中存在导致所有线程崩溃的错误,那么我希望我的父进程检测到该错误并抛出异常。如何在加入进程时检测进程是否干净退出?

读取进程的值'exitcode:

  • None 如果进程尚未完成。
  • 0 如果进程成功结束。
  • N 如果进程出错,并以代码 N 退出。
  • -N 如果进程被信号 N 杀死。 (例如 -15 如果被 SIGTERM 杀死)

比如在你的主进程中:

for p in processes:
    p.join()
    if p.exitcode > 0:
        raise ValueError(f'a process exited with code {p.exitcode}')

在你的可运行文件中:

try:
    do_something()
except KnownError as _:
    exit(my_known_error_code)

您可以在调用 join() 后检查退出代码。

例如:

for p in processes:
  p.join()
  if p.exitcode is not 0:
    exit(1)

参考: