首页 > 解决方案 > 如何捕捉多处理退出原因?

问题描述

使用pythonmultiprocessing包创建进程时,运行该进程几次后。子进程会退出,不会抛出异常,那么如何找到这个进程退出的原因呢?

task = create_process('plugin1', start_process)
task.join()
if task.exception:
    pid, e, tb = task.exception

def create_process(name, func):
    task = Process(target=func, name=name, args=(name,))
    task.daemon = True
    task.start()
    return task

class Process(multiprocessing.Process): 
    def __init__(self, *args, **kwargs):
        multiprocessing.Process.__init__(self, *args, **kwargs)
        self._pconn, self._cconn = multiprocessing.Pipe()
        self._exception = None

    def run(self):
        try:
            multiprocessing.Process.run(self)
            print(50 * '1', os.getpid(), self.name)
            import setproctitle
            setproctitle.setproctitle("test5")
            print(50 * '0', os.getpid(), self.name)
            self._cconn.send(None)
        except Exception as e:
            tb = traceback.format_exc()
            self._cconn.send((os.getpid(), e, tb))

    @property
    def exception(self):
        if self._pconn.poll():
            self._exception = self._pconn.recv()
        return self._exception

标签: pythonexceptionmultiprocessing

解决方案


推荐阅读