Kushughulikia Maombi ya Proxy Yaliyoshindikana kwa asyncio.gather
Kagua hitilafu zinazorudishwa na asyncio.gather na uweke kila tokeo likihusishwa na proxy iliyochaguliwa.
asyncio.gather pamoja na return_exceptions=True huweka hitilafu za kazi kwenye orodha yake ya matokeo. Kwa hiyo kusubiri kundi bila hitilafu hakumaanishi kwamba kila ombi la proxy lilifanikiwa.
Weka lengwa na proxy iliyochaguliwa kando ya awaitable zilizowasilishwa, kisha kagua kila tokeo:
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 ina korutini za maombi za programu; routes ina jozi (url, proxy) zinazolingana kwa mpangilio huo huo. Kazi za kurekodi ni ushughulikiaji wa matokeo wa programu yenyewe. gather huhifadhi mpangilio wa pembejeo hata mpangilio wa kukamilika ukiwa tofauti.
Ainisha CancelledError inayorudishwa na kazi mtoto kama kughairi badala ya kulaumu proxy yake. Kughairi kwa gather ya nje bado kunaenea kwa watoto wasiokamilika; return_exceptions haibadilishi kughairi huko kuwa mafanikio ya kawaida.
Ushughulikiaji wa hali ya HTTP pia uko ndani ya operesheni ya ombi. aiohttp haitoi hitilafu kwa kila kosa la HTTP kwa chaguo-msingi, kwa hiyo rudisha hali au tumia raise_for_status kulingana na sera ya kazi.
Mara matokeo yanapoonekana, programu inaweza kutofautisha kushindikana kwa muunganisho na majibu ya lengwa na kuamua kazi gani inastahili jaribio lingine.