asyncio.gather return_exceptions=True bilan vazifalar istisnolarini o'z natijalar ro'yxatiga qo'yadi. Shuning uchun to'plamni istisnosiz kutish har bir proxy so'rovi muvaffaqiyatli bo'lganini anglatmaydi.

Manzilni va tanlangan proksiyni yuborilgan awaitable'lar yonida saqlang, so'ngra har bir natijani tekshiring:

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 ilovaning so'rov korutinalarini o'z ichiga oladi; routes ularga mos (url, proxy) juftliklarini bir xil tartibda o'z ichiga oladi. Yozib olish funksiyalari ilovaning o'z natijalar ishlov berishidir. gather tugash tartibi boshqacha bo'lsa ham kirish tartibini saqlaydi.

Bola vazifadan qaytgan CancelledError'ni uning proksiysini ayblash o'rniga bekor qilish deb tasniflang. Tashqi gather bekor qilinishi hali ham tugallanmagan bolalarga tarqaladi; return_exceptions bu bekor qilishni oddiy muvaffaqiyatga aylantirmaydi.

HTTP holatini boshqarish ham so'rov operatsiyasi ichida. aiohttp sukut bo'yicha har bir HTTP xatosi uchun istisno chiqarmaydi, shuning uchun holatni qaytaring yoki vazifa siyosatiga muvofiq raise_for_status qo'llang.

Natijalar ko'rinadigan bo'lgach, ilova ulanish nosozliklarini manzil javoblaridan ajratib, qaysi ish yana bir urinishga loyiqligini hal qilishi mumkin.

O'xshash maqolalar