你有實際嘗試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