Как установить max_retries в Python: модуль requests
Быстрый ответ
Для установки значения параметра max_retries в библиотеке requests, вам необходимо сконфигурировать стратегию повторных попыток и ассоциировать её с вашей сессией requests. Ниже представлен пример реализации:
from requests import Session
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
session = Session()
session.mount('http://', HTTPAdapter(max_retries=retries))
session.mount('https://', HTTPAdapter(max_retries=retries))
response = session.get('https://example.com')
Не забывайте ассоциировать HTTPAdapter как с протоколом http, так и с https. Для отправки запросов используйте session.get и таким образом сделайте их устойчивыми к сбоям.

Разбираемся с параметрами повторных попыток
Подробное знание параметров Retry поможет вам настроить оптимальную стратегию повторных запросов:
total: Максимальное количество попыток, в результате которых запрос будет считаться неудавшимся.connect: Применяется в случае неудачи установления соединения.read: Используется при возникновении проблем с чтением данных.redirect: Число попыток при перенаправлении запроса.status_forcelist: Коды ответов сервера, которые вызывают повторение запроса.backoff_factor: Время ожидания между попытками.allowed_methods: HTTP-методы, при которых допустимы повторные попытки.
С настройкой параметров следует обходиться с учётом необходимого уровня отказоустойчивости вашего приложения и стратегии обработки ошибок.
Ошибки при настройке повторных попыток
Установка глобального значения DEFAULT_RETRIES не является лучшим решением, следует использовать механизм повторений на уровне сессий. Также относитесь критически к изменению кода во время его выполнения (monkey-patching): это можно считать плохой практикой, ведущей к нестабильности работы кода.
Отслеживание обновлений
Поскольку библиотека requests продолжает развиваться, важно следить за возможными изменениями, которые могут повлиять на логику работы с повторными запросами.
Визуализация
Вы можете представить механизм повторных попыток как игру в дартс, где ваш запрос — это игрок, а попытки — дротики.
Игрок 🎯 = Ваш запрос
Дротики 🎯 = Повторные попытки
Пример использования "дротиков":
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retries = Retry(total=5, backoff_factor=0.1)
session.mount('http://', HTTPAdapter(max_retries=retries))
Таким образом, у игрока есть 5 попыток попасть в цель — сервер.
Итог: С увеличением количества попыток, увеличивается и вероятность успешного выполнения ваших запросов!
Игрок 🎯 -> Промах! -> Собирается 🎯 -> Пытается еще раз... (до 5 раз)
Это повышает шансы на успешное выполнение запроса до приемлимого результата даже при временных неполадках.
Дополнительные сведения
Повышенные требования к механике повторных попыток
Для систем с особыми требованиями можно разработать индивидуальную логику повторных попыток, применив например такие паттерны как «Цепные выключатели» (Circuit Breakers) и джиттер, чтобы предотвратить совпадение времени отправки повторных запросов.
Скоростные ограничения и замедление
В случае ограничения скорости передачи данных, можно настроить backoff_factor или реализовать способ учёта данных ограничений, чтобы обеспечить работоспособность процесса.
Постоянное удержание эффективности
Важно использовать сессии для сохранения cookie-файлов и заголовков, чтобы избежать их повторной отправки, и тем самым повысить эффективность работы.
Заключительные замечания о производительности
Будьте готовы к тому, что повторные попытки ведут к увеличению задержки отклика системы. Необходимо находить равновесие между быстродействием и надёжностью, регулярно анализируя время ответа системы.


