Retry decorator for both synchronous and asynchronous functions.
Project description
the-retry
Retry decorator for both synchronous and asynchronous functions.
Features
- No external dependencies.
- Supports asyncio. Works with both synchronous and asynchronous functions.
- Exponential backoff with jitter.
- Able to call custom function or await custom coroutine on exception occurs.
Installation
pip install the-retry
Decorator parameters
Arguments:
expected_exception
: exception or tuple of exceptions (default BaseException).
Keyword arguments:
attempts
: how much times the function will be retried, value -1 is infinite (default 2).backoff
: time interval between theattemps
(default 0).exponential_backoff
:current_backoff = backoff * 2 ** retries
(default False).ignore_exceptions
: only log error but not raise exception ifattempts
exceeds (default False).jitter
: maximum value of deviation from thecurrent_backoff
(default 0).maximum_backoff
:current_backoff = min(current_backoff, maximum_backoff)
(default 0).on_exception
: function that called or await on error occurs (default None). Be aware if a decorating function is synchronouson_exception
function must be synchronous too and accordingly for asynchronous functionon_exception
must be asynchronous.
Examples
Immediately retry once without delay on any exception occurs
from the_retry import retry
@retry()
def some_function():
print("some function")
Immediately retry once without delay on ValueError occurs with calling side effect function
from the_retry import retry
def side_effect():
print("side effect")
@retry(expected_exception=ValueError, on_exception=side_effect)
def some_function():
print("some function")
Retry async function with 10 attempts with exponential backoff on ValueError or AttributeError occurs with calling side effect coroutine
from the_retry import retry
async def async_side_effect():
print("async side effect")
@retry(
expected_exception=(ValueError, AttributeError)
attempts=10,
backoff=1,
exponential_backoff=True,
jitter=1,
maximum_backoff=60,
on_exception=async_side_effect,
)
async def async_some_function():
print("some function")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
the-retry-0.1.1.tar.gz
(4.0 kB
view details)
Built Distribution
File details
Details for the file the-retry-0.1.1.tar.gz
.
File metadata
- Download URL: the-retry-0.1.1.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.1 CPython/3.10.4 Linux/5.15.0-58-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab6b801adc3ef40c9ec6b2def3890621572ee1f33b51972503a1cb7e4759e687 |
|
MD5 | 013a0f0c4231a772c19f0ba0409b6d57 |
|
BLAKE2b-256 | 2f764cd9f60ec057d9548e404a209997fb236e435e96e382ca74b935997b1f4e |
File details
Details for the file the_retry-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: the_retry-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.1 CPython/3.10.4 Linux/5.15.0-58-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5c3ad10629b255e47e5f9ade8314f34ca46aa723092a983f0b9f0232fa2220d |
|
MD5 | 04bfb33e213185c57f06f654019b406d |
|
BLAKE2b-256 | 5fcac240e3467db7832a5ea755da6b93b20b8a3347e8c5950f669d7eff41e21f |