如何跳过python多处理中的错误

如何跳过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

我使用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\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