Uğursuz proxy sorğularını asyncio.gather ilə idarə etmək
asyncio.gather-ın qaytardığı istisnaları yoxlayın və hər nəticəni seçilmiş proxy ilə əlaqələndirin.
asyncio.gather return_exceptions=True ilə tapşırıq istisnalarını nəticə siyahısına qoyur. Buna görə də dəstəni istisna olmadan gözləmək bütün proxy sorğularının uğurla tamamlandığı anlamına gəlmir.
Təyinatı və seçilmiş proxy-ni göndərilən awaitable-larla birlikdə saxlayın, sonra hər nəticəni yoxlayın:
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 tətbiqin sorğu korutinlərini saxlayır; routes isə onların uyğun (url, proxy) cütlərini eyni sıra ilə saxlayır. Qeyd funksiyaları tətbiqin öz nəticə emalıdır. Tamamlanma sırası fərqli olsa da, gather giriş sırasını qoruyur.
Qaytarılan uşaq CancelledError-u proxy-ni günahlandırmaq əvəzinə ləğv kimi təsnif edin. Xarici gather-ın ləğvi hələ də tamamlanmamış uşaqlara ötürülür; return_exceptions bu ləğvi adi uğura çevirmir.
HTTP statusunun emalı da sorğu əməliyyatının içində olmalıdır. aiohttp standart olaraq hər HTTP xətası üçün istisna atmır, buna görə statusu qaytarın və ya tapşırığın siyasətinə uyğun raise_for_status tətbiq edin.
Nəticələr görünən olduqda, tətbiq bağlantı uğursuzluqlarını təyinat cavablarından ayıra və hansı işin yeni cəhdə dəyər olduğuna qərar verə bilər.