You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程:实现任意进程出错时终止整个脚本的方案

解决子进程异常时立即终止整个脚本的方案

针对你的需求,我们可以通过主进程监控所有子进程的运行状态,一旦检测到任意子进程异常退出,立即终止所有存活子进程并退出主脚本。这种方式无需依赖try-except捕获异常,能覆盖包括外部库崩溃在内的各类进程异常场景。

实现代码

import time
import sys
from multiprocessing import Process


def possible_error_causer(a, b):
    time.sleep(5)
    c = a / b
    print(c)
    time.sleep(100)


if __name__ == "__main__":
    processes = []
    # 启动所有子进程并保存引用
    for i in range(3):
        p = Process(target=possible_error_causer, args=(i, i))
        p.start()
        processes.append(p)
    
    # 持续监控子进程状态
    while True:
        error_triggered = False
        # 检查每个子进程的运行状态与退出码
        for proc in processes:
            if not proc.is_alive():
                # 退出码非0表示进程异常终止
                if proc.exitcode != 0:
                    error_triggered = True
                    break
        
        if error_triggered:
            # 终止所有仍在运行的子进程
            for proc in processes:
                if proc.is_alive():
                    proc.terminate()
                    proc.join()
            print("检测到子进程异常,终止所有进程并退出")
            sys.exit(1)
        
        # 检查是否所有进程都正常完成
        all_completed = all(not proc.is_alive() for proc in processes)
        if all_completed:
            print("所有进程正常执行完毕")
            sys.exit(0)
        
        # 每隔1秒检查一次,平衡性能与响应速度
        time.sleep(1)

方案说明

  • 进程状态监控:主进程通过is_alive()判断子进程是否存活,通过exitcode判断进程是否异常退出(非0值通常表示异常)。
  • 异常处理逻辑:一旦发现异常退出的子进程,立即调用terminate()终止所有存活子进程,再通过sys.exit()退出主脚本,彻底终止整个程序。
  • 跨平台兼容:依赖Python标准库的multiprocessing与sys模块,无需额外依赖,在Windows、Linux、macOS下均可正常运行。

内容的提问来源于stack exchange,提问作者Jedi Knight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:40:50