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 వర్తించండి.

ఫలితాలు కనిపించిన తర్వాత అప్లికేషన్ కనెక్షన్ వైఫల్యాలను గమ్యం యొక్క ప్రతిస్పందనల నుండి వేరు చేసి, ఏ పని మరో ప్రయత్నానికి అర్హమో నిర్ణయించగలదు.

సంబంధిత వ్యాసాలు