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)माउंट HTTPS गंतव्य URL चुनता है। HTTP अनुरोध http:// के अंतर्गत माउंट किए गए एडाप्टर का उपयोग करते हैं।
| इनपुट | यह क्या नियंत्रित करता है |
|---|---|
| pool_connections | मैनेजर कितने पूल कैश करता है |
| pool_maxsize | एक पूल के भीतर कनेक्शन |
| pool_block=True | अतिरिक्त बनाने के बजाय पूल कनेक्शन की प्रतीक्षा करना |
Requests प्रॉक्सी URL के अनुसार प्रॉक्सी मैनेजर भी कैश करता है। ये मान घूमती प्रॉक्सी और गंतव्यों की सूची पर एक कुल सीमा नहीं बनाते। यदि आवश्यकता यह है कि सारा काम एक ही मध्यस्थ से होकर जाए, तो एप्लिकेशन-स्तर का समवर्ती बजट उपयोग करें।
ब्लॉकिंग प्रतिक्रियाओं को मुक्त करना अनिवार्य बनाती है: बॉडी का उपभोग करें या स्ट्रीमिंग प्रतिक्रियाएँ बंद करें ताकि प्रतीक्षारत काम आगे बढ़ सके। दिखाए गए विन्यास में Requests का एडाप्टर इस पूल-प्रतीक्षा के लिए अलग टाइमआउट नहीं देता।