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 लागू करा.

निकाल दिसल्यानंतर ॲप्लिकेशन कनेक्शन अपयश आणि गंतव्याच्या प्रतिसादांमध्ये फरक करू शकते आणि कोणते कार्य आणखी एका प्रयत्नास पात्र आहे हे ठरवू शकते.

संबंधित लेख