Амжилтгүй прокси хүсэлтүүдийг asyncio.gather-ээр шийдвэрлэх
asyncio.gather буцаадаг үл хамаарах зүйлсийг шалгаж, үр дүн бүрийг сонгосон прокситой холбоотой байлгаарай.
asyncio.gather нь return_exceptions=True-тэй үед даалгаврын үл хамаарах зүйлсийг өөрийн үр дүнгийн жагсаалтад хийдэг. Тиймээс багцыг ямар ч үл хамаарах зүйлгүй хүлээх нь бүх прокси хүсэлт амжилттай болсон гэсэн үг биш.
Очих газрыг болон сонгосон проксийг илгээсэн awaitable-уудын хажууд байлгаад, дараа нь үр дүн бүрийг шалгаарай:
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 нь програмын хүсэлтийн корутинуудыг агуулна; routes нь тэдгээрт харгалзах (url, proxy) хосуудыг ижил дарааллаар агуулна. Бичлэгийн функцууд нь програмын өөрийн үр дүнгийн боловсруулалт юм. Дуусах дараалал өөр байсан ч gather оролтын дарааллыг хадгална.
Хүүхэд даалгавраас буцсан CancelledError-ыг түүний проксийг буруутгахын оронд цуцлалт гэж ангилаарай. Гадаад gather-ын цуцлалт дуусаагүй хүүхдүүд рүү үргэлжлэн тархана; return_exceptions тэр цуцлалтыг энгийн амжилт болгохгүй.
HTTP статусын боловсруулалт мөн хүсэлтийн үйлдлийн дотор байх ёстой. aiohttp анхдагчаар HTTP алдаа бүрт үл хамаарах зүйл шиддэггүй тул статусыг буцаана уу, эсвэл даалгаврын бодлогын дагуу raise_for_status хэрэглээрэй.
Үр дүн харагдах болмогц програм холболтын алдааг очих газрын хариунаас ялгаж, аль ажил дахин оролдох үнэ цэнэтэйг шийдэж чадна.