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 लागू गर्नुहोस्।
नतिजाहरू देखिने भएपछि एप्लिकेसनले जडान असफलता र गन्तव्यका प्रतिक्रियाहरू छुट्याउन सक्छ र कुन काम अर्को प्रयासको योग्य छ भनी निर्णय गर्न सक्छ।