https://github.com/nerandell/async_retrial
Python package for retrial of asyncio based coroutines
https://github.com/nerandell/async_retrial
asynchronous asyncio python-3 retries
Last synced: 6 months ago
JSON representation
Python package for retrial of asyncio based coroutines
- Host: GitHub
- URL: https://github.com/nerandell/async_retrial
- Owner: nerandell
- License: other
- Created: 2015-06-23T06:33:27.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-03-14T11:33:59.000Z (over 2 years ago)
- Last Synced: 2025-03-27T13:11:11.370Z (7 months ago)
- Topics: asynchronous, asyncio, python-3, retries
- Language: Python
- Size: 19.5 KB
- Stars: 14
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.txt
Awesome Lists containing this project
README
Retrial library for asyncio coroutines
======================================
.. image:: https://travis-ci.org/nerandell/async_retrial.svg?branch=master
:target: https://travis-ci.org/nerandell/async_retrialEasy to use retry library based on asyncio_
.. _asyncio: https://docs.python.org/3/library/asyncio.html
Requirements
------------
- Python >= 3.3
- asyncio https://pypi.python.org/pypi/asyncioInstallation
------------To install via pip
.. code-block:: bash
$ pip install async_retrial
To install from source.. code-block:: bash
$ git clone https://github.com/nerandell/async_retrial
$ cd async_retrial
$ python setup.py installExamples
--------You can either use ``RetryHandler`` or ``retry`` decorator
``retry`` decorator
.. code-block:: python
def retry(should_retry_for_result=_default_retry_for_result,
should_retry_for_exception=_default_retry_for_exception,
multiplier=2, timeout=None, max_attempts=None, strategy=None):
"""
:param should_retry_for_result: A function that is called with argument as result to allow retrial for specific
set of results. Must return a boolean value
:param should_retry_for_exception: A function that is called if the function to be retried threw an exception
allow retrial for specific set of exceptions. Must return a boolean value
:param multiplier: Must be an integer value, If defined, the retrial would be exponential with this behind the
multiplier
:param timeout: If defined, the function will be retried if no result was returned in this time.
:param max_attempts: Max number of attempts to retry
:param strategy: Must be a list of integers. If defined, retrial would follow this strategy. For ex. if strategy
is [1,3,5,8,11], function would be retried at 1, 3, 5, 8, 11, 11, 11, ... seconds
:return:
"""To use the decorator:
.. code-block:: python
from retrial.retrial import retry
Using different settings:.. code-block:: python
@retry()
def my_function(*args, **kwargs):
'''Retry till successful. Default multiplier is 2'''
@retry(multiplier=3)
def my_function(*args, **kwargs):
'''Retry at 0, 3, 9, 27, 81 ... seconds until successful'''
@retry(strategy=[1, 1, 2, 3, 5, 8, 13])
def my_function(*args, **kwargs):
'''Retry at 1, 1, 2, 3, 5, 8, 13, 13, 13 ... seconds until successful'''
@retry(max_attempts=3)
def my_function(*args, **kwargs):
'''Retry for a maximum of 3 times'''
@retry(should_retry_for_result=lambda x: x < 0)
def my_function(*args, **kwargs):
'''Retry if result is negative value'''
@retry(should_retry_for_exception=lambda x: isinstance(x, KeyError))
def my_function(*args, **kwargs):
'''Retry if exception was of type KeyError'''License
-------
``async_retrial`` is offered under the MIT license.Source code
-----------
The latest developer version is available in a github repository:
https://github.com/nerandell/async_retrial