ຈັດການຄຳຮ້ອງຂໍຜ່ານພຣັອກຊີທີ່ລົ້ມເຫຼວດ້ວຍ 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 ຕາມນະໂຍບາຍຂອງໜ້າວຽກ.
ເມື່ອເຫັນຜົນແລ້ວ ແອັບພລິເຄຊັນສາມາດແຍກຄວາມລົ້ມເຫຼວຂອງການເຊື່ອມຕໍ່ອອກຈາກການຕອບສະໜອງຂອງປາຍທາງ ແລະ ຕັດສິນວ່າວຽກໃດສົມຄວນໄດ້ຮັບການລອງອີກຄັ້ງ.