Handy decorator to set retry policies for async callables with some useful features
@retry(
tries=5,
allowed_exceptions=(RuntimeError,),
intervals=(5, 7, 10),
fail_cb=make_request_callback,
)
async def make_request(address, client):
... http request code goes here...
if response.status_code >= 300:
raise RuntimeError()
def make_request_callback(address, client)
...
- 5 retries will be performed
- with 5, 7, 10, 10 and 10 seconds interval between retries.
I.e. if
intervalstuple length more thantriesnumber, the last tuple interval will be used for the rest of the tries. make_request_callback()synchronous function will be called if all attempts are failed- The accepted exceptions tuple allows you to control when to retry.
- You can optionally pass a custom
logger: logging.Loggerto the decorator within alogger=parameter. Otherwiseretry_decoratorlogger will be created to log retries.
Other possible ways to use this decorator:
@retry(5, (MyCustomError,), (5, 7, 10), make_request_callback)
@retry(3, (MyCustomError,), (1,))
# this actually will either successfully return or fail on first exception occured
@retry(3)
Look into tests.py to see more on usage.
Available as a package on pypi:
pip install aioretry-decorator
Or install it directly from GitHub:
pip install git+https://github.com/remort/aioretry.git#egg=aioretry_decorator