bambulab — библиотека повторов для Python. Опишите политику один раз — попытки, задержки, какие ошибки считать временными — и оборачивайте ею любой вызов.
from datetime import timedelta
from bambulab import Policy
policy = Policy(
max_attempts=4,
base_delay=timedelta(seconds=1),
)
ok = policy.run("fetch-profile")
print(ok)
n = policy.attempts("fetch-profile")
print(n)
Случайные задержки не дают множеству клиентов повторять запросы синхронно.
Задержки растут с выбранным множителем до заданного предела.
Если первая попытка удалась, горячий путь ничего не выделяет.
Попытка не начинается, если не успеет завершиться до дедлайна вызывающего.