Handsaming av mislukka proxy-førespurnader med asyncio.gather
Undersøk unntaka som asyncio.gather returnerer, og hald kvart resultat knytt til den valde proxyen.
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.