PoolTimeout का मतलब है HTTPX को तय प्रतीक्षा समय के भीतर पूल से कनेक्शन नहीं मिला। यह प्रॉक्सी तक नए TCP कनेक्शन के टाइमआउट का सबूत नहीं है। दूसरा अनुरोध अभी आपके प्रोसेस के अंदर इंतज़ार कर सकता है।

क्लाइंट एक ही कनेक्शन की अनुमति दे और पहला स्ट्रीमिंग रिस्पॉन्स खुला छोड़ दिया जाए, तो यह आसानी से दोहराया जा सकता है। नया अनुरोध शुरू करने से वह कनेक्शन अपने आप नहीं छूटता।

स्ट्रीमिंग रिस्पॉन्स की ज़िम्मेदारी साफ़ रखें

import httpx

limits = httpx.Limits(
    max_connections=1,
    max_keepalive_connections=1,
)
timeout = httpx.Timeout(
    connect=5, read=10, write=10, pool=1
)

with httpx.Client(
    proxy="http://203.0.113.10:8080",
    trust_env=False,
    limits=limits,
    timeout=timeout,
) as client:
    with client.stream("GET", "https://example.com/") as response:
        print(response.status_code)
        for chunk in response.iter_bytes():
            print(len(chunk))

    next_response = client.get("https://example.com/")
    print(next_response.status_code)

चलाने से पहले दस्तावेज़ का प्रॉक्सी पता बदलें। अगला अनुरोध स्ट्रीम के कॉन्टेक्स्ट से निकलने के बाद शुरू होता है। कोड लूप से बाहर निकले या अपवाद दे, तब भी कॉन्टेक्स्ट से निकलना रिस्पॉन्स बंद करता है।

client.send(request, stream=True) जैसे मैनुअल स्ट्रीमिंग में अंतिम बंद करने की ज़िम्मेदारी आपके कोड की है। AsyncClient में संबंधित मैनुअल सफ़ाई के लिए response.aclose() को await किया जाता है। बिना पढ़े रिस्पॉन्स को बंद करना क्षमता खाली करता है, लेकिन नीचे के कनेक्शन को दोबारा इस्तेमाल करने के बजाय छोड़ना पड़ सकता है।

अपवाद का नाम पढ़ें

ConnectTimeout कनेक्शन स्थापित करने से संबंधित है। ReadTimeout रिस्पॉन्स डेटा के इंतज़ार से संबंधित है। PoolTimeout कनेक्शन स्लॉट मिलने से संबंधित है। सिर्फ़ «प्रॉक्सी टाइमआउट» लिखने से सही सुधार चुनने के लिए ज़रूरी अंतर खो जाता है।

एंडपॉइंट IP बदलने से पहले खुले रिस्पॉन्स, समवर्ती काम और कनेक्शन सीमाएँ जाँचें। उचित समवर्ती भार के लिए बड़ा पूल सही हो सकता है, लेकिन कभी बंद न होने वाले रिस्पॉन्स ठीक नहीं करता। वह बस ऐप को घेरने के लिए ज़्यादा क्षमता देता है।

पूरे काम के दौरान क्लाइंट दोबारा इस्तेमाल योग्य रखें। हर अनुरोध को ऊपरी तौर पर चलाने के लिए क्लाइंट फिर बनाना जीवनचक्र की समस्या छिपा सकता है और कनेक्शन दोबारा इस्तेमाल करने का लाभ खो सकता है।

संबंधित लेख