Resolve "修复异常后进程卡死问题"
- 主要问题:
在任务子进程异常后,主进程中获取job的exitcode,并抛出ChildProcessError异常。但在主流程中还创建了multiprocessing.Queue相关的管道通信的进程。默认情况下通信进程在主进程退出时并不会直接终止,而会等待消息派发完成才终止。而子进程已经异常退出,无法收取消息,最终导致进程卡死。
解决方法:
调用multiprocess.Queue.cancel_join_thread接口取消阻塞。
- 潜在问题: multiprocessing.Queue在full转态时调用put接口会阻塞,若子进程异常无法接受消息则会导致进程卡死。 解决方法: 在multiprocessing.Queue.put时,定时检查子进程状态。
Closes #377 (closed)
Edited by mingfa.yang