Медленные ответы и таймауты
Большинство жалоб на таймауты оказывается клиентом, настроенным под задержки дата-центра, который говорит с резидентным маршрутом.
Ставьте таймаут в тридцать секунд
Построить маршрут через домашнее подключение дольше, чем достучаться до сервера в дата-центре. Таймаут в пять секунд выбрасывает запросы, которые бы завершились, и прогон выглядит ненадёжным, хотя он был всего лишь нетерпеливым.
Первый запрос липкой сессии самый медленный, потому что именно тогда строится маршрут. Последующие запросы через ту же сессию быстрее.
Работающие таймауты
requests.get(url, proxies=proxies, timeout=30)
page.goto(url, timeout=30000) # Playwright, milliseconds
DOWNLOAD_TIMEOUT = 30 # ScrapyКак различить слои
Если медленно на статическом адресе, маршрут короткий и виновата скорее цель. Если медленно на резидентном выходе, выходное устройство может просто сидеть на плохом канале, и новая сессия подберёт другое.
Полезная проверка это запросить лёгкий эндпоинт через ту же сессию. Если он отвечает быстро, а ваша цель нет, прокси в порядке.
Отделить прокси от цели
# fast? then the route is healthy
curl -w '%{time_total}\n' -o /dev/null -s \
-x login_c_US_s_5_ttl_15m:password@proxy.sotaproxy.com:10000 \
https://api.ipify.orgПропускная способность это не задержка
Повышение параллельности не ускоряет отдельные запросы, а за порогом терпимости адресата замедляет всё, порождая лимиты. Размазывайте работу по большему числу адресов или сессий вместо большего числа потоков на одном.
Переиспользование соединений помогает больше, чем большинство тонких настроек: пул убирает рукопожатие из каждого запроса.
Бюджет, который работает на практике
Значения таймаутов обычно копируют из датацентровой схемы и больше не пересматривают. Вот числа, которые выдерживают резидентные маршруты и при этом не оставляют воркеры висеть минутами.
Разумные значения по умолчанию
Connect timeout 10 seconds
Read timeout 30 seconds
Total per request 30 seconds
Retries 2, each on a different address
Backoff 1s, 3s, then give up on that target for a while
# Static addresses tolerate tighter values: a 10 second total
# is reasonable there and will surface real problems faster.