Чому 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 у показаній конфігурації не надає окремого тайм-ауту для цього очікування пулу.