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
相关产品推荐
相关产品推荐

