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 колдонуңуз.

Жыйынтыктар көрүнгөндөн кийин колдонмо туташуу бузулууларын бара турган жердин жоопторунан ажыратып, кайсы иш дагы бир аракетке татыктуу экенин чече алат.

Тектеш макалалар