如何在多处理中捕获工作程序中的异常

我正在使用Python(2.7.3)中的多处理模块,并希望调试我的工作人员正在进行的一些事情.但是,我似乎无法捕获工作线程中的任何异常.

一个最小的例子:

import multiprocessing as mp


a=[1]
def worker():
    print a[2]


def pool():
    pool = mp.Pool(processes=1)
    pool.apply_async(worker, args = ())
    pool.close()
    pool.join()
    print "Multiprocessing done!"


if __name__ == '__main__':
    pool()

这预计会引发IndexError,但我的输出只是

    Multiprocessing done!

有没有办法向我展示工作线程中发生的所有异常,而无需手动提升我自己的?

最佳答案
除非您调用get methodget method(apply_async的返回值),否则不会引发错误:

根据AsyncResult.get documentation

Return the result when it arrives. If timeout is not None and the
result does not arrive within timeout seconds then
multiprocessing.TimeoutError is raised. If the remote call raised an
exception then that exception will be reraised by get()
.

def pool():
    pool = mp.Pool(processes=1)
    result = pool.apply_async(worker, args=())
    result.get() # <------------
    pool.close()
    pool.join()
    print "Multiprocessing done!"

转载注明原文:如何在多处理中捕获工作程序中的异常 - 代码日志