我試圖用ipython的並行處理並行處理數據。我按照@minrk的說明回答how to get intermidiate results in ipython parallel processing?的問題。由於數據是異構的,一些處理任務比其他處理任務更早完成,我希望在它們可用時立即保存它們。我這樣做以下列方式:處理來自asyncmap的結果
for i in asyncmap:
print i
麻煩的是,我的代碼,有時會拋出異常(上面的例子:
from IPython.parallel import Client
def specialfunc(param):
import time
if param > 8:
raise IOError
else:
time.sleep(param)
return param
client = Client()
balanced = client.load_balanced_view()
balanced.block = False
param_list = range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
asyncmap = balanced.map_async(specialfunc, param_list, ordered=False)
當他們準備好然後我就可以遍歷asyncmap和結果變得可用當調用參數超過8時強制IOError)我想處理。但是,只要其中一臺發動機發生搖晃,整個異步映射「似乎」即將完成。
我實際上注意到,當我詢問asyncmap.metadata可以很好地找出哪個消息給出了錯誤(asyncmap.metadata [i] ['pyerr']),但是我不知道如何等待結果像他們一樣進來。
所以我的問題是我應該如何處理我的結果異步到達我的引擎,即使他們有時會拋出異常。如何在引擎中捕捉異常而不會影響控制器中的等待結果?
BTW:'load_balanced_view'的'map'方法是否帶有'ordered'關鍵字。我以爲'map'是按照定義排序的。 –