asyncio.gather kun return_exceptions=True metas la esceptojn de taskoj en sian rezultan liston. Do atendi laaron sen escepto ne signifas, ke ĉiu prokura peto sukcesis.

Tenu la celon kaj la elektitan prokuron apud la senditaj awaitable-objektoj, poste ekzamenu ĉiun rezulton:

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 enhavas la petajn korutinojn de la aplikaĵo; routes enhavas iliajn respondajn parojn (url, proxy) en la sama ordo. La registraj funkcioj estas la propra rezulta prilaborado de la aplikaĵo. gather konservas la enigan ordon eĉ kiam la fina ordo malsamas.

Klasifiku redonitan CancelledError de infana tasko kiel nuligon anstataŭ kulpigi ĝian prokuron. Nuligo de la ekstera gather ankoraŭ propagiĝas al nefinitaj infanoj; return_exceptions ne transformas tiun nuligon en ordinaran sukceson.

Ankaŭ la prilaborado de HTTP-statuso apartenas ene de la peta operacio. aiohttp defaŭlte ne ĵetas escepton por ĉiu HTTP-eraro, do redonu la statuson aŭ apliku raise_for_status laŭ la politiko de la tasko.

Kiam la rezultoj videblas, la aplikaĵo povas distingi konektomalsukcesojn de respondoj de la celo kaj decidi, kiun laboron indas provi denove.

Rilataj artikoloj