Fedeproxy-git-ActivityPub-r.../fedeproxy/common/retry.py

30 lines
876 B
Python

import logging
import time
from functools import wraps
logger = logging.getLogger(__name__)
class RetryException(Exception):
pass
def retry(exceptions, tries=2, delay=1):
def deco_retry(f):
@wraps(f)
def f_retry(*args, **kwargs):
mtries, mdelay = tries + 1, delay
while mtries > 0:
try:
return f(*args, **kwargs)
except exceptions as e:
logger.info('%s: %s, Retrying in %s seconds...', f.__qualname__, e, mdelay)
if mtries == tries + 1:
logger.debug("", exc_info=True)
time.sleep(mdelay)
mtries -= 1
mdelay *= 2
raise RetryException("Number of retries exceeded for function " + f.__name__)
return f_retry
return deco_retry