你有实际尝试get
从apply_async
(或map_async
)返回的AsyncResult
结果为异常父待提高。您提供
def func():
raise Exception("We failed")
...
result = pool.apply_async(func, args=(arg))
time.sleep(2)
result.get() # Exception only gets raised here
任何callback
如果函数成功返回时,才会执行。如果引发异常,它会被跳过。
在Python 3.2+中,引入了error_callback
关键字参数,它允许您传递一个回调,如果worker中出现异常,则会执行回调,但在Python 2.x中不能这样做。你可以做的是使用包装的工人功能在try
/except
块回报任何异常的工人提出的,而不是提高它:
def func():
try:
raise Exception("We failed")
except Exception as e:
return e
然后你就可以有一个检查正常的回调函数查看Exception
是否已退回:
def callback(result):
if isinstance(result, Exception):
# Do whatever you need to do to clean up and exit
else:
# Function was successful
非常适合您的信息。非常感谢!我想我会转向Python 3.2以简化操作。 – 2014-10-08 16:33:59
@ASDF如果可能的话,我会推荐到3.4(更新),但是,Python 3.x会让你的生活更轻松。如果没有太多的工作来移植你的程序,那就去做吧。 – dano 2014-10-08 16:37:10