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.

Artikuj të ngjashëm