Skip to main content

Retry for Python3. No dependency.

Project description

Retrrry

Decorate flaky functions with @retry to apply retrying logic.

Simplest way to use retrrry is actually to copy the code in retry.py and use it in your project, since there is no dependencies other than the standard library.

@retry
def unreliable_func():
    import random
    if random.randint(0, 10) < 5:
        raise IOError('Fail')
    else:
        return 'Success'

Configurations

  • Specify stop condition (i.e. limit by number of attempts)
  • Specify wait condition (i.e. exponential backoff sleeping between attempts)
  • Specify certain Exceptions
  • Specify expected returned result

Installation

pip install retrrry
from retrrry import retry

Examples

The default behavior is to retry forever without waiting:

@retry
def never_stop_never_wait():
    print('Retry forever, ignore Exceptions, no wait between retries')
    raise Exception

Set the number of attempts before giving up:

@retry(stop_max_attempt_number=7)
def stop_after_7_attempts():
    print('Stopping after 7 attempts')
    raise Exception

Set a boundary for time for retry:

@retry(stop_max_delay=10000)
def stop_after_10_s():
    print('Stopping after 10 seconds')
    raise Exception

Set wait time between retries:

@retry(wait_fixed=2000)
def wait_2_seconds():
    print('Wait 2 second between retries')
    raise Exception

Inject some randomness:

@retry(wait_random_min=1000, wait_random_max=2000)
def wait_1_to_2_seconds():
    print('Randomly wait 1 to 2 seconds between retries')
    raise Exception

Use exponential backoff:

@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000)
def wait_exponential_1000():
    print(
        'Wait 2^i * 1000 milliseconds after ith retry, up to 10 seconds, then 10 seconds afterwards'
    )
    raise Exception

Deal with specific exceptions:

def retry_if_io_error(exception):
    return isinstance(exception, IOError)

@retry(retry_on_exception=retry_if_io_error)
def might_have_io_error():
    print('Retry if an IOError occurs, raise any other errors')
    raise Exception

@retry(retry_on_exception=retry_if_io_error, wrap_exception=True)
def might_have_io_error_raise_retry_error():
    print('Retry if an IOError occurs, raise any other errors wrapped in RetryError')
    raise Exception

Alter the behavior of retry based on a function return value:

def retry_if_result_none(result):
    return result is None

@retry(retry_on_result=retry_if_result_none)
def might_return_none():
    print('Retry if return value is None')
    import random
    if random.randint(0, 10) > 1:
        return None
    return 'Done'

# Or retry if result is equal to 1
@retry(retry_on_result=lambda res: res == 1)
def might_return_one():
    print('Retry if return value is 1')
    import random
    if random.randint(0, 10) > 1:
        return 1
    return 0

Finally, we can always combine all of the configurations.

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

retrrry-3.0.4.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

retrrry-3.0.4-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file retrrry-3.0.4.tar.gz.

File metadata

  • Download URL: retrrry-3.0.4.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.10.5 Darwin/21.6.0

File hashes

Hashes for retrrry-3.0.4.tar.gz
Algorithm Hash digest
SHA256 1fc9830ddeb0def5b89fecd1cb76db254516692c930ac4d75ec3dfeba5b871db
MD5 9ecc6b7bb7c4a10ca609e5363a52e79f
BLAKE2b-256 3d7763bebedac8897202009d2ba1e6579a97bb1bcc21732157bea2dbb0b43dcf

See more details on using hashes here.

File details

Details for the file retrrry-3.0.4-py3-none-any.whl.

File metadata

  • Download URL: retrrry-3.0.4-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.10.5 Darwin/21.6.0

File hashes

Hashes for retrrry-3.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9d074e595664193f872dcf504d1785e3a3b098dd44facee7e34a7331f070be83
MD5 f99eff0d0e0cb42c155a7733b75407d3
BLAKE2b-256 dbef6ef8ea5a86371d209209839a888012c5d356257ef4804eab9cb3e60262ae

See more details on using hashes here.

Supported by

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