Warum Requests mehr Verbindungen als pool_maxsize öffnet
Verwenden Sie pool_block für einen begrenzten Pool und ergänzen Sie ein Anwendungsbudget, wenn das Limit den gesamten Datenverkehr über einen Proxy abdecken soll.
Mit dem Standard pool_block=False begrenzt pool_maxsize die im Pool gehaltenen Verbindungen, nicht jede gleichzeitige Verbindung. Requests kann zusätzliche erstellen und sie danach verwerfen.
Für einen begrenzten Pool, den die HTTPS-Anfragen einer bestehenden Sitzung nutzen:
from requests.adapters import HTTPAdapter
adapter = HTTPAdapter(
pool_connections=10,
pool_maxsize=4,
pool_block=True,
)
session.mount("https://", adapter)Das Mounten wählt HTTPS-Ziel-URLs aus. HTTP-Anfragen verwenden den unter http:// eingebundenen Adapter.
| Eingabe | Was es steuert |
|---|---|
| pool_connections | Wie viele Pools der Manager zwischenspeichert |
| pool_maxsize | Verbindungen innerhalb eines Pools |
| pool_block=True | Auf eine Pool-Verbindung warten, statt eine zusätzliche zu erstellen |
Requests speichert außerdem Proxy-Manager nach Proxy-URL zwischen. Diese Werte bilden keine einzige Gesamtobergrenze über eine rotierende Liste von Proxys und Zielen. Verwenden Sie ein Parallelitätsbudget auf Anwendungsebene, wenn die Anforderung lautet, dass alle Arbeit über einen Vermittler läuft.
Blockieren macht das Freigeben von Antworten unerlässlich: Antwortkörper lesen oder Streaming-Antworten schließen, damit wartende Arbeit fortfahren kann. Der Adapter von Requests bietet in der gezeigten Anordnung keinen eigenen Timeout für dieses Warten auf den Pool.