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.get_seconds_with_jitter()
backoff.update(success): Update the failure count by passing a boolean representing success.
backoff.get_seconds_with_jitter(): The current backoff time in seconds, with jitter applied. Zero if there are no recorded failures. Read-only.
backoff.get_raw_seconds(): The current backoff time in seconds, without 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
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.