Að meðhöndla misheppnaðar proxy-beiðnir með asyncio.gather
Skoðaðu undantekningarnar sem asyncio.gather skilar og haltu hverri niðurstöðu tengdri valda proxyinu.
asyncio.gather með return_exceptions=True setur undantekningar verkefnanna í niðurstöðulistann sinn. Að bíða eftir hópnum án undantekningar þýðir því ekki að hver proxy-beiðni hafi tekist.
Haltu áfangastaðnum og valda proxyinu við hlið sendu awaitable-hlutanna og skoðaðu síðan hverja niðurstöðu:
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 inniheldur beiðnakórutínur forritsins; routes inniheldur samsvarandi (url, proxy) pör í sömu röð. Skráningaraðgerðirnar eru eigin niðurstöðumeðferð forritsins. gather varðveitir röð inntaksins jafnvel þótt röð lokunar sé önnur.
Flokkaðu CancelledError sem barnaverkefni skilar sem afpöntun frekar en að kenna proxyinu þess um. Afpöntun ytri gather berst enn til ókláraðra barna; return_exceptions breytir þeirri afpöntun ekki í venjulega velgengni.
Meðferð HTTP-stöðu tilheyrir líka inni í beiðniaðgerðinni. aiohttp kastar ekki undantekningu fyrir hverja HTTP-villu sjálfgefið, svo skilaðu stöðunni eða notaðu raise_for_status samkvæmt stefnu verkefnisins.
Þegar niðurstöðurnar eru sýnilegar getur forritið greint tengivillur frá svörum áfangastaðarins og ákveðið hvaða vinna eigi skilið aðra tilraun.