प्रॉक्सी चेकर में वैश्विक urllib opener बदलावों से बचें
urllib प्रॉक्सी जाँचों को उनके अपने opener तक सीमित रखें, पूरी प्रक्रिया के राउटिंग और टाइमआउट डिफ़ॉल्ट बदलने के बजाय।
from urllib.request import ProxyHandler, build_opener
def make_proxy_opener(proxy_uri):
return build_opener(ProxyHandler({
"http": proxy_uri,
"https": proxy_uri,
}))
opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.जब कोई मार्ग जाँच का हो तो इस opener की अपनी open विधि को कॉल करें। उदाहरण का HTTP एंडपॉइंट आपकी सेवा से या सार्वजनिक जाँचों के लिए HTTP प्रॉक्सी सूची से आ सकता है। यह अंश स्वामित्व दर्शाता है; यह पूर्ण प्रमाणीकरण या स्वास्थ्य नीति परिभाषित नहीं करता। खाता-विशिष्ट कोई भी handler उसी इच्छित क्लाइंट से जुड़ा रखें।
urllib.request.install_opener() प्रक्रिया-व्यापी डिफ़ॉल्ट बदलता है जिसे बाद के मॉड्यूल-स्तरीय urlopen() कॉल उपयोग करते हैं। इसलिए प्रॉक्सी में घूमने वाला चेकर असंबंधित अनुरोधों को अपने अंतिम एंडपॉइंट का उपयोग करने दे सकता है। अस्थायी रूप से इंस्टॉल करना और सफ़ाई में पुनर्स्थापित करना फिर भी साझा बदलाव के दौरान समवर्ती अनुरोधों को चलने देता है।
socket.setdefaulttimeout() इसी तरह बाद में बनाए गए sockets के डिफ़ॉल्ट बदलता है। जब केवल जाँच को ही यह मिलना चाहिए तब ऑपरेशन-स्तरीय टाइमआउट उपयोग करें।
जाँच के प्रतिक्रियाएँ बंद करें और परिणाम विशिष्ट रखें: HTTP त्रुटि प्रतिक्रिया स्वतः मृत प्रॉक्सी श्रोता नहीं है। यदि async सेवा में synchronous urllib जाँच उपयोग होती है, तो अवरोधक कार्य को उपयुक्त worker पर ले जाएँ; वह निष्पादन निर्णय वैश्विक opener बदलाव को पृथक नहीं करता।
जाँच को कोई अन्य नेटवर्क नीति पीछे छोड़े बिना अपना अवलोकन लौटाना चाहिए। उसका अपना क्लाइंट ऑब्जेक्ट और सीमित ऑपरेशन उस सीमा को स्पष्ट करते हैं।