Python 如何在多处理中捕获worker中的异常

Python 如何在多处理中捕获worker中的异常,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我正在使用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() p

我正在使用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()
这将引发索引器,但我的输出仅为

    Multiprocessing done!

是否有一种方法可以显示工作线程中发生的所有异常,而不手动引发我自己的异常?

除非调用(apply\u async的返回值),否则不会引发错误:

根据报告:

当结果到达时返回结果。如果timeout不是None,则 结果未在超时秒内到达 引发multiprocessing.TimeoutError如果远程调用引发了 异常,则get()将重新调用该异常。

def池():
pool=mp.pool(进程=1)
结果=pool.apply_async(worker,args=())

result.get()#我想falsetru给了你所需要的。我只想再扩展一点

如果不仅要获取错误,而且要获取原始上下文(即知道异常发生在worker()的第1行)对您来说很重要,那么您可以检查说明如何使用原始上下文重新释放异常的内容


这对mp.Pool不起作用,所以这只是为了防止你需要更多的东西。使用更明确的多处理技术而不是mp.Pool来回答您的问题。

Wow,太快了。谢谢。对不起,我想那是我的意外。我经常回到这个答案上来……但是我的否决票在两个小时内不能取消。抱歉。如果我不想等待进程完成,但仍然希望获得异常,我可以做什么?我的意思是使用
result.get()
将阻止代码,直到进程完成。如何逃逸它?好的,异常->导致进程终止。您需要等待进程结束。
def pool():
    pool = mp.Pool(processes=1)
    result = pool.apply_async(worker, args=())
    result.get() # <------------
    pool.close()
    pool.join()
    print "Multiprocessing done!"