python多处理池重试 [英] python multiprocessing pool retries
本文介绍了python多处理池重试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果原始计算失败,是否可以使用简单的池重新发送一段数据进行处理?
Is there a way to re-send a piece of data for processing, if the original computation failed, using a simple pool?
import random
from multiprocessing import Pool
def f(x):
if random.getrandbits(1):
raise ValueError("Retry this computation")
return x*x
p = Pool(5)
# If one of these f(x) calls fails, retry it with another (or same) process
p.map(f, [1,2,3])
推荐答案
如果可以(或不介意)立即重试,请使用包装该函数的装饰器:
If you can (or don't mind) retrying immediately, use a decorator wrapping the function:
import random
from multiprocessing import Pool
from functools import wraps
def retry(f):
@wraps(f)
def wrapped(*args, **kwargs):
while True:
try:
return f(*args, **kwargs)
except ValueError:
pass
return wrapped
@retry
def f(x):
if random.getrandbits(1):
raise ValueError("Retry this computation")
return x*x
p = Pool(5)
# If one of these f(x) calls fails, retry it with another (or same) process
p.map(f, [1,2,3])
这篇关于python多处理池重试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文