DannyAI's picture
Upload 34 files
e6583bf verified
import time
import functools
def retry(exceptions, tries=3, delay=2, backoff=2):
"""
Retry decorator with exponential backoff.
Args:
exceptions (tuple): exceptions to catch and retry on.
tries (int): number of attempts.
delay (int): initial delay between retries.
backoff (int): multiplier for delay.
Usage:
@retry((TimeoutError, SomeOtherError))
def func(...):
...
"""
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
_tries, _delay = tries, delay
while _tries > 1:
try:
return func(*args, **kwargs)
except exceptions as e:
print(f"Warning: {e}, retrying in {_delay} seconds...")
time.sleep(_delay)
_tries -= 1
_delay *= backoff
return func(*args, **kwargs)
return wrapper
return decorator