[英]how to skip error in python multiprocessing
我過去使用multiprocessing.Pool.map運行長時間的獨立作業
import multiprocessing
pool = multiprocessing.Pool(multiprocessing.cpu_count())
input_var = [1,2,3]
ris = pool.map(long_function,input_var)
pool.close()
pool.join()
這很好用,但是例如,如果我在long_function(2)
中long_function(2)
錯誤,我將丟失通過long_function(1)
和long_function(3)
獲得的所有信息。
有辦法避免這種情況嗎?
最好的辦法是獲得類似ris=[long_function(1), ERROR, long_function(3)]
。
def safe_long_function(*args, **kwargs):
try:
return long_function(*args, **kwargs)
except Exception as e:
return e
您基本上想捕獲引發的異常,然后將其返回而不是引發它們。 例如
def long_function(x):
if x == 2:
raise Exception("This number is even")
import multiprocessing
pool = multiprocessing.Pool() # default is num CPUs
input_var = [1,2,3]
ris = pool.map(safe_long_function, input_var)
pool.close()
pool.join()
print ris
這將得到[1, Exception("This number is even"), 3]
然后,您可以執行類似的操作
for result in ris:
if isinstance(result, Exception):
print "Error: %s" % result
else:
print result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.