Retry Functions¶
The retry functions can be used to do automatic retries. There are three different ways to use them.
htf.retry()
can be called directly. htf.retriable()
is a decorator that can be used to decorate
functions so that they are retried and htf.retrying()
is a context manager that can be used to do
retries within a context block.
If an exception occurs during execution of the action, it is retried until the maximum number of attempts is reached. Exceptions during the last retry are re-raised to inform the caller of its occurence.
The delay between attempts can also be specified. By default there is no delay.
Direct Calls¶
Direct calls are done using htf.retry()
.
import htf
count = 0
def foo(bar):
global count
print("foo() called with", bar)
print("count:", count)
count += 1
if count < 3:
raise ValueError("count is too small")
return "success"
htf.retry(foo, args=("bar",), attempts=3, delay=1.0)
-
htf.
retry
(action, args=(), kwargs={}, attempts=2, delay=None, retry_exceptions=(<class 'BaseException'>, ))¶ Retry
action
with a given number of attempts and a given delay.- Parameters
action (callable) – the action to be retried
args= () (tuple) – the positional arguments passed to
action
kwargs={} (dict) – the keyword arguments passed to
action
attempts=2 (int) – the number of attempts
delay=None (float or int) – the delay between attempts in seconds
retry_exceptions= (BaseException,) (tuple) – the exceptions to be catched to retry the action
- Returns
the return value of
action(*args, **kwargs)
Using the Decorator¶
If a function or method is supposed to always do retries, the decorator htf.retriable()
can be used.
import htf
count = 0
@htf.retriable(attempts=3, delay=1.0)
def foo(bar):
global count
print("foo() called with", bar)
print("count:", count)
count += 1
if count < 3:
raise ValueError("count is too small")
return "success"
foo("bar")
-
htf.
retriable
(attempts=2, delay=None, retry_exceptions=(<class 'BaseException'>, ))¶ A decorator factory for retry(). Wrap your function in @retriable(…) to give it retry powers!
- Parameters
attempts=2 (int) – the number of attempts
delay=None (float or int) – the delay between attempts in seconds
retry_exceptions= (BaseException,) (tuple) – the exceptions to be catched to retry the action
- Returns
a function decorator supporting retries
Using the Context Manager¶
To use retries within a context block use the htf.retrying()
context manager.
import htf
count = 0
def foo(bar):
global count
print("foo() called with", bar)
print("count:", count)
count += 1
if count < 3:
raise ValueError("count is too small")
return "success"
with htf.retrying(foo, attempts=3, delay=1.0) as retrying_foo:
retrying_foo("bar")
-
htf.
retrying
(action, attempts=2, delay=None, retry_exceptions=(<class 'BaseException'>, ))¶ A context manager for wrapping
action
with retry functionality with a given number of attempts and a given delay.- Parameters
action (callable) – the action to be retried
attempts=2 (int) – the number of attempts
delay=None (float or int) – the delay between attempts in seconds
retry_exceptions= (BaseException,) (tuple) – the exceptions to be catched to retry the action
- Returns
a context manager supporting retries