1234567891011121314151617181920212223242526272829 |
- import time
- import functools
- # Partly copy-pasted from contrib/python/retry
- def retry_func(f, exceptions=Exception, tries=-1, delay=1, max_delay=None, backoff=1):
- _tries, _delay = tries, delay
- while _tries:
- try:
- return f()
- except exceptions as e:
- _tries -= 1
- if not _tries:
- raise
- time.sleep(_delay)
- _delay *= backoff
- if max_delay is not None:
- _delay = min(_delay, max_delay)
- def retry(**retry_kwargs):
- def decorator(func):
- @functools.wraps(func)
- def wrapper(*args, **kwargs):
- return retry_func(lambda: func(*args, **kwargs), **retry_kwargs)
- return wrapper
- return decorator
|