python multiprocessing pool retries
multiprocessing, python
Solution
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])
Problem
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]) ```