Trajtimi i kërkesave të dështuara të proxy-t me asyncio.gather
Inspektoni përjashtimet që kthen asyncio.gather dhe mbani çdo rezultat të lidhur me proxy-n e zgjedhur.
asyncio.gather me return_exceptions=True i vendos përjashtimet e detyrave në listën e rezultateve të tij. Prandaj, pritja e grupit pa përjashtim nuk do të thotë që çdo kërkesë proxy pati sukses.
Mbani destinacionin dhe proxy-n e zgjedhur pranë awaitable-ve të dërguara, pastaj inspektoni çdo rezultat:
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 përmban korutinat e kërkesave të aplikacionit; routes përmban çiftet përkatëse (url, proxy) në të njëjtin rend. Funksionet e regjistrimit janë trajtimi i rezultateve i vetë aplikacionit. gather ruan rendin e hyrjes edhe kur rendi i përfundimit është i ndryshëm.
Klasifikoni një CancelledError të kthyer nga një detyrë fëmijë si anulim, në vend që të fajësoni proxy-n e saj. Anulimi i gather-it të jashtëm përhapet ende te fëmijët e papërfunduar; return_exceptions nuk e shndërron atë anulim në sukses të zakonshëm.
Trajtimi i statusit HTTP gjithashtu i përket operacionit të kërkesës. aiohttp nuk ngre përjashtim për çdo gabim HTTP si parazgjedhje, prandaj ktheni statusin ose aplikoni raise_for_status sipas politikës së detyrës.
Pasi rezultatet të jenë të dukshme, aplikacioni mund të dallojë dështimet e lidhjes nga përgjigjet e destinacionit dhe të vendosë se cila punë meriton një provë tjetër.