Блокирующий запрос к пулу прокси может остановить Scrapy
Держите синхронный вызов API пула прокси вне пути цикла событий Scrapy и дайте обнаружению эндпоинтов собственную политику сбоев.
У краулера настроено достаточно одновременных запросов. И всё же он останавливается каждый раз, когда просит у пула прокси очередной адрес. Добавление новых прокси эту остановку не затрагивает.
Распространённый шаблон middleware вызывает requests.get(pool_url) внутри process_request(). Это синхронная сетевая операция на пути, который должен взаимодействовать с асинхронным движком Scrapy. Пока вызов ждёт, он может задерживать постороннюю работу в том же потоке цикла событий.
В задаче два запроса
Один запрос получает эндпоинт у службы пула. Другой использует этот эндпоинт для связи с пунктом назначения. Измеряйте и отчитывайтесь о них отдельно. Медленный API пула может сделать каждый выбранный прокси медленным ещё до того, как приложение к нему подключилось.
Используйте интеграцию асинхронного обнаружения, поддерживаемую установленной версией Scrapy, либо получайте и обновляйте ограниченный локальный набор эндпоинтов вне критического пути каждого запроса. Если блокирующую работу нужно вынести, дайте этому исполнителю собственные лимиты и обработку тайм-аутов; неограниченная очередь лишь переносит задержку.
Не делайте автоматически ещё один вызов обнаружения на каждый запрос. Кратковременный кэш или арендованная партия могут снизить зависимость от службы пула, если срок их жизни соответствует реальной политике эндпоинтов службы.
Определите, что значит неудачный поиск
Пустой или неудачный ответ пула не должен молча удалять метаданные прокси и разрешать прямой запрос. Выберите явный исход: ждать в пределах бюджета задачи, завершиться с ошибкой или использовать одобренный кэшированный эндпоинт.
Держите свободным и собственный маршрут API пула. Если это внутренняя служба, отправка её приватного имени хоста через тот самый прокси, который помогает её выбрать, может создать циклическую зависимость.
Когда обнаружение работает, не блокируя постороннюю работу, изучите обычную транзакцию через прокси. Это отдельные исправления, и их измерение заслуживает отдельных полей в журнале.