asyncio.gather med return_exceptions=True legg unntaka til oppgåvene i resultatlista si. Å venta på bunken utan unntak tyder derfor ikkje at kvar proxy-førespurnad lukkast.

Hald destinasjonen og den valde proxyen saman med awaitable-objekta som vart sende, og undersøk deretter kvart resultat:

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 inneheld førespurnadskorutinane til applikasjonen; routes inneheld dei tilsvarande (url, proxy)-para i same rekkjefølgje. Registreringsfunksjonane er applikasjonen si eiga resultatbehandling. gather bevarer inndata-rekkjefølgja sjølv når fullføringsrækkjefølgja er annleis.

Klassifiser ein returnert CancelledError frå ein undertoppgåve som avbrot i staden for å klandra proxyen hans. Avbrot av den ytre gather forplantar seg framleis til uferdige born; return_exceptions gjer ikkje det avbrotet om til vanleg suksess.

Handsaming av HTTP-status høyrer også inni førespurnadsoperasjonen. aiohttp kastar ikkje unntak for kvar HTTP-feil som standard, så returner statusen eller bruk raise_for_status etter politikken til oppgåva.

Når resultata er synlege, kan applikasjonen skilja tilkoplingsfeil frå svar frå destinasjonen og avgjera kva arbeid som fortener eit nytt forsøk.

Relaterte artiklar