asyncio.gather के साथ विफल प्रॉक्सी अनुरोधों को संभालना
asyncio.gather जो अपवाद लौटाता है उनकी जाँच करें और हर परिणाम को चुने गए प्रॉक्सी से जुड़ा रखें।
asyncio.gather return_exceptions=True के साथ कार्यों के अपवादों को अपनी परिणाम सूची में रखता है। इसलिए बिना किसी अपवाद के बैच की प्रतीक्षा करने का अर्थ यह नहीं है कि हर प्रॉक्सी अनुरोध सफल हुआ।
गंतव्य और चुना गया प्रॉक्सी सबमिट किए गए awaitable के साथ रखें, फिर हर परिणाम की जाँच करें:
outcomes = await asyncio.gather(*jobs, return_exceptions=True)
for (url, proxy), outcome in zip(routes, outcomes):
if isinstance(outcome, BaseException):
record_failure(url, proxy, outcome)
else:
record_success(url, proxy, outcome)
jobs में एप्लिकेशन के अनुरोध कोरूटीन होते हैं; routes में उनके संगत (url, proxy) जोड़े उसी क्रम में होते हैं। रिकॉर्डिंग फ़ंक्शन एप्लिकेशन का अपना परिणाम प्रबंधन हैं। पूर्णता का क्रम अलग होने पर भी gather इनपुट क्रम बनाए रखता है।
लौटाए गए संतान कार्य के CancelledError को रद्दीकरण के रूप में वर्गीकृत करें, उसके प्रॉक्सी को दोष न दें। बाहरी gather का रद्दीकरण अभी भी अधूरे संतानों तक फैलता है; return_exceptions उस रद्दीकरण को सामान्य सफलता में नहीं बदलता।
HTTP स्थिति का प्रबंधन भी अनुरोध क्रिया के भीतर होना चाहिए। aiohttp डिफ़ॉल्ट रूप से हर HTTP त्रुटि के लिए अपवाद नहीं उठाता, इसलिए स्थिति लौटाएँ या कार्य की नीति के अनुसार raise_for_status लागू करें।
परिणाम दिखने के बाद एप्लिकेशन कनेक्शन विफलताओं को गंतव्य की प्रतिक्रियाओं से अलग कर सकता है और तय कर सकता है कि कौन-सा कार्य एक और प्रयास के योग्य है।