簡體   English   中英

如何跳過python多處理中的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM