如何跳过python多处理中的错误
我使用multiprocessing.Pool.map运行长时间独立作业如何跳过python多处理中的错误,python,error-handling,multiprocessing,Python,Error Handling,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\u函数(2)中出错,我将丢失通过long\u函数(1)和long
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\u函数(2)
中出错,我将丢失通过long\u函数(1)
和long\u函数(3)
获得的所有信息
有没有办法避免这种情况
最好是获得像ris=[long_函数(1)、ERROR、long_函数(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,例外(“此数字为偶数”),3]
然后你可以做类似的事情
for result in ris:
if isinstance(result, Exception):
print "Error: %s" % result
else:
print result