Python requests: повторить запрос с задержкой и backoff
Для повторных HTTP-запросов при временных ошибках подключите urllib3 Retry к requests.Session через HTTPAdapter. Ограничьте число попыток, выберите повторяемые статусы и включите backoff.
Рабочий пример
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
retry = Retry(total=3, backoff_factor=0.4,
status_forcelist=[429, 502, 503, 504],
allowed_methods={"GET", "HEAD"})
session = requests.Session()
session.mount("https://", HTTPAdapter(max_retries=retry))
response = session.get("https://api.example.test/status", timeout=(3, 10))
response.raise_for_status()Кортеж timeout отдельно ограничивает подключение и чтение ответа. backoff_factor увеличивает паузу между повторениями; 429 может содержать Retry-After, который urllib3 учитывает в совместимых версиях.
Частый вопрос
Повторится ли POST автоматически?
В примере allowed_methods содержит только GET и HEAD. Добавляйте POST лишь когда API поддерживает идемпотентный ключ и повтор не создаст вторую операцию.