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-ը՝ ըստ առաջադրանքի քաղաքականության։

Երբ արդյունքները տեսանելի են, հավելվածը կարող է տարբերել միացման խափանումները նպատակակետի պատասխաններից և որոշել, թե որ աշխատանքն է արժանի ևս մեկ փորձի։

Առնչվող հոդվածներ