👁 В автоматизации частая ошибка делать глупые ретраи: retry 3 раза и всё. В реальности это ломает системы ещё сильнее: если сервис начал падать, ты начинаешь долбить его ещё активнее. Правильный подход — exponential backoff + jitter, чтобы равномерно распределять нагрузку и не создавать «шторма» запросов.
📝 Реализация умных ретраев с backoff и jitter
import time
import random
import requests
def fetch_with_retry(url, retries=5, base_delay=0.5):
for attempt in range(retries):
try:
response = requests.get(url, timeout=2)
response.raise_for_status()
return response.json()
except Exception as e:
if attempt == retries - 1:
raise
delay = base_delay * (2 ** attempt)
jitter = random.uniform(0, delay / 2)
time.sleep(delay + jitter)
data = fetch_with_retry("https://api.example.com/data")
print(data)📌 Как это работает:
- Задержка растёт экспоненциально (
2^attempt), уменьшая давление на сервис при сбоях. jitterдобавляет случайность, чтобы избежать синхронных повторов от множества клиентов.- В случае постоянной ошибки выбрасывается исключение, а не бесконечный цикл.
❗️ В прод-автоматизации ретраи — это не «на всякий случай», а часть архитектуры. Неправильные ретраи могут добить сервис быстрее, чем его изначальная проблема.
tags: #python #автоматизация #разработка


