Skip to main content

Exponential backoff with jitter.

Project description

An exponential backoff implementation as described in an AWS architecture post. Uses full jitter.

Example

from expbackoff import Backoff

backoff = Backoff(base_seconds=0.5, max_seconds=120)

while True:
    backoff.sleep() # Depending on previous failures, potentially delay before performing an action
    success = do_a_thing() # Perform an action, record whether it succeeded
    backoff.update(success) # Update the failure count

API

  • backoff = expbackoff.Backoff(...)

  • Create a Backoff object. Arguments:

    • base_seconds (required): Part of the backoff calculation, i.e base_seconds * 2 ^ (failures - 1)

    • max_seconds (required): Max seconds to delay, regardless of failure count.

    • failures (optional): Number of current failures. Useful if another service is handling your retries. Defaults to 0.

    • random (optional): A random object. Defaults to random.random.

  • backoff.sleep(): If failures have occurred, sleep for backoff.seconds

  • backoff.update(success): Update the failure count by passing a boolean representing success.

  • backoff.seconds: The current backoff time in seconds, with jitter applied. Zero if there are no recorded failures. Read-only.

  • backoff.failures: The current number of failures. Read-only.

Alternatives

Popular options are retrying and backoff. These both use a decorator API so aren’t suitable for all uses - hence expbackoff.

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

expbackoff-0.1.0.tar.gz (2.5 kB view hashes)

Uploaded Source

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