Сәтсіз прокси сұрауларын 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 қолданыңыз.
Нәтижелер көрінгеннен кейін қосымша қосылым ақауларын межелі орынның жауаптарынан ажыратып, қай жұмыс тағы бір әрекетке лайық екенін шеше алады.