Neizdevušos proxy pieprasījumu apstrāde ar asyncio.gather
Pārbaudiet asyncio.gather atgrieztos izņēmumus un saglabājiet katru rezultātu saistītu ar izvēlēto proxy.
asyncio.gather ar return_exceptions=True ievieto uzdevumu izņēmumus savā rezultātu sarakstā. Tāpēc grupas gaidīšana bez izņēmuma nenozīmē, ka katrs proxy pieprasījums ir izdevies.
Turiet galamērķi un izvēlēto proxy blakus iesniegtajiem awaitable objektiem, pēc tam pārbaudiet katru rezultātu:
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 satur lietotnes pieprasījumu korutīnas; routes satur tām atbilstošos (url, proxy) pārus tajā pašā secībā. Ierakstīšanas funkcijas ir pašas lietotnes rezultātu apstrāde. gather saglabā ievades secību arī tad, ja pabeigšanas secība atšķiras.
Atgriezto bērna uzdevuma CancelledError klasificējiet kā atcelšanu, nevis vainojiet tā proxy. Ārējā gather atcelšana joprojām izplatās uz nepabeigtiem bērniem; return_exceptions nepārvērš šo atcelšanu parastā panākumā.
HTTP statusa apstrāde arī pieder pie pieprasījuma darbības. aiohttp pēc noklusējuma neizraisa izņēmumu par katru HTTP kļūdu, tāpēc atgrieziet statusu vai piemērojiet raise_for_status saskaņā ar uzdevuma politiku.
Kad rezultāti ir redzami, lietotne var atšķirt savienojuma kļūmes no galamērķa atbildēm un izlemt, kurš darbs ir pelnījis vēl vienu mēģinājumu.