Почему Requests открывает больше соединений, чем pool_maxsize
Используйте pool_block для ограниченного пула и добавьте бюджет уровня приложения, когда лимит должен охватывать весь трафик через прокси.
При значении по умолчанию pool_block=False pool_maxsize ограничивает соединения, удерживаемые в пуле, а не каждое одновременное соединение. Requests может создавать дополнительные соединения и затем отбрасывать их.
Для ограниченного пула, который используют HTTPS-запросы существующей сессии:
from requests.adapters import HTTPAdapter
adapter = HTTPAdapter(
pool_connections=10,
pool_maxsize=4,
pool_block=True,
)
session.mount("https://", adapter)Монтирование выбирает URL-адреса назначения HTTPS. HTTP-запросы используют адаптер, смонтированный под http://.
| Вход | Что это контролирует |
|---|---|
| pool_connections | Сколько пулов кэширует менеджер |
| pool_maxsize | Соединения внутри одного пула |
| pool_block=True | Ожидание соединения из пула вместо создания дополнительного |
Requests также кэширует менеджеры прокси по URL прокси. Эти значения не образуют единого общего лимита для меняющегося списка прокси и назначений. Используйте бюджет параллелизма на уровне приложения, если требуется, чтобы вся работа шла через один посредник.
Блокировка делает освобождение ответов обязательным: вычитывайте тела или закрывайте потоковые ответы, чтобы ожидающая работа могла продолжаться. Адаптер Requests в показанной конфигурации не предоставляет отдельного тайм-аута для этого ожидания пула.