2013-10-27 63 views
1

我有以下代碼:Pool.map只是掛起 - 如何做異常處理

pool = Pool(10) 
pool.map(run_update_procedure, titles_to_update) 

有時pool.map只會工作,關於上述的20 titles 18。這會導致程序掛起。

有沒有辦法做這樣的事情:

try: 
    pool.map(...) 

因此,如果地圖無法在功能繼續?我如何構建這個異常處理到多處理?

基本上,我想殺死線程,如果它沒有在x時間內完成。

回答

3

我的建議是要麼(最好)解決run_update_procedure超時或以其他方式表現更好(here's一個潛在的片段,可以幫助),而不是掛,開關multiprocessing.Poolapply_asyncmap_async,並提供一個timeout參數爲AsyncResult.get()

例子:

pool = Pool(10) 
result = pool.map_async(run_update_procedure, titles_to_update) 
try: 
    updates = result.get(timeout=x) 
except TimeoutError: 
    # handle timeout 
+1

謝謝。你能不能在上面的例子中展示一個我如何使用'map_async'的代碼示例? – David542