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 යොදන්න.
ප්රතිඵල දෘශ්යමාන වූ පසු යෙදුමට සම්බන්ධතා අසාර්ථකතා ගමනාන්තයේ ප්රතිචාරවලින් වෙන් කර හඳුනාගෙන කුමන කාර්යයට තවත් උත්සාහයක් වටින්නේද යන්න තීරණය කළ හැක.