retry#
- composer.utils.retry(exc_class=<class 'Exception'>, num_attempts=3, initial_backoff=1.0, max_jitter=0.5)[source]#
Decorator to retry a function with backoff and jitter.
Attempts are spaced out with
initial_backoff + 2**num_attempts + random.random() * max_jitter
seconds.Optionally, the decorated function can specify retry_index as an argument to receive the current attempt number.
Example: .. testcode:
from composer.utils import retry @retry(RuntimeError, num_attempts=3, initial_backoff=0.1) def flaky_function(retry_index: int): if retry_index < 2: raise RuntimeError("Called too soon!") return "Third time's a charm." print(flaky_function())
Third time's a charm.
- Parameters
exc_class (Type[Exception] | Sequence[Type[Exception]]], optional) โ The exception class or classes to retry. Defaults to Exception.
num_attempts (int, optional) โ The total number of attempts to make. Defaults to 3.
initial_backoff (float, optional) โ The initial backoff, in seconds. Defaults to 1.0.
max_jitter (float, optional) โ
The maximum amount of random jitter to add. Defaults to 0.5.
Increasing the
max_jitter
can help prevent overloading a resource when multiple processes in parallel are calling the same underlying function.