Skip to main content

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 the attemps (default 0).
  • exponential_backoff: current_backoff = backoff * 2 ** retries (default False).
  • ignore_exceptions: only log error but not raise exception if attempts exceeds (default False).
  • jitter: maximum value of deviation from the current_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 synchronous on_exception function must be synchronous too and accordingly for asynchronous function on_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


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)

Uploaded Source

Built Distribution

the_retry-0.1.1-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

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

Hashes for the-retry-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ab6b801adc3ef40c9ec6b2def3890621572ee1f33b51972503a1cb7e4759e687
MD5 013a0f0c4231a772c19f0ba0409b6d57
BLAKE2b-256 2f764cd9f60ec057d9548e404a209997fb236e435e96e382ca74b935997b1f4e

See more details on using hashes here.

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

Hashes for the_retry-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c5c3ad10629b255e47e5f9ade8314f34ca46aa723092a983f0b9f0232fa2220d
MD5 04bfb33e213185c57f06f654019b406d
BLAKE2b-256 5fcac240e3467db7832a5ea755da6b93b20b8a3347e8c5950f669d7eff41e21f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page