您必须实际尝试从(或)返回get
的结果,以便在父级中引发异常。AsyncResult
apply_async
map_async
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
引入了关键字参数,它允许您传递一个回调,如果在工作程序中引发异常,则该回调将被执行,但在 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