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 ຕາມນະໂຍບາຍຂອງໜ້າວຽກ.

ເມື່ອເຫັນຜົນແລ້ວ ແອັບພລິເຄຊັນສາມາດແຍກຄວາມລົ້ມເຫຼວຂອງການເຊື່ອມຕໍ່ອອກຈາກການຕອບສະໜອງຂອງປາຍທາງ ແລະ ຕັດສິນວ່າວຽກໃດສົມຄວນໄດ້ຮັບການລອງອີກຄັ້ງ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ