asyncio.gather dengan return_exceptions=True menaruh pengecualian tugas ke dalam daftar hasilnya. Menunggu kumpulan tanpa pengecualian karena itu tidak berarti setiap permintaan proxy berhasil.

Simpan tujuan dan proxy terpilih bersama awaitable yang dikirim, lalu periksa setiap hasil:

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 berisi korutin permintaan aplikasi; routes berisi pasangan (url, proxy) yang sesuai dalam urutan yang sama. Fungsi pencatat adalah penanganan hasil milik aplikasi sendiri. gather mempertahankan urutan masukan meskipun urutan penyelesaian berbeda.

Klasifikasikan CancelledError yang dikembalikan tugas anak sebagai pembatalan alih-alih menyalahkan proxynya. Pembatalan gather luar tetap menyebar ke anak yang belum selesai; return_exceptions tidak mengubah pembatalan itu menjadi keberhasilan biasa.

Penanganan status HTTP juga berada di dalam operasi permintaan. aiohttp tidak memunculkan pengecualian untuk setiap kesalahan HTTP secara bawaan, jadi kembalikan status atau terapkan raise_for_status sesuai kebijakan tugas.

Setelah hasil terlihat, aplikasi dapat membedakan kegagalan koneksi dari respons tujuan dan memutuskan pekerjaan mana yang layak dicoba lagi.

Artikel terkait