HTTPX PoolTimeout ບໍ່ແມ່ນໝົດເວລາເຊື່ອມຕໍ່ພຣັອກຊີ
ແຍກການລໍຖ້າໃນພູລ HTTPX ແລະຄືນຊັບພະຍາກອນຄຳຕອບສະຕຣີມ ກ່ອນປ່ຽນພຣັອກຊີທີ່ອາດຍັງບໍ່ໄດ້ຮັບຄຳຮ້ອງຂໍຕໍ່ໄປ.
PoolTimeout ໝາຍເຖິງ HTTPX ເອົາການເຊື່ອມຕໍ່ຈາກພູລບໍ່ໄດ້ພາຍໃນເວລາລໍຖ້າທີ່ຕັ້ງໄວ້. ບໍ່ແມ່ນຫຼັກຖານວ່າການເຊື່ອມຕໍ່ TCP ໃໝ່ໄປພຣັອກຊີໝົດເວລາ. ຄຳຮ້ອງຂໍທີສອງອາດຍັງລໍຢູ່ໃນໂປຣເຊສຂອງທ່ານ.
ເຮັດໃຫ້ເກີດຊ້ຳໄດ້ງ່າຍເມື່ອໄຄລເອັນອະນຸຍາດພຽງໜຶ່ງການເຊື່ອມຕໍ່ ແລະຄຳຕອບສະຕຣີມທຳອິດຖືກເປີດຄ້າງ. ການເລີ່ມຄຳຮ້ອງຂໍໃໝ່ບໍ່ໄດ້ຄືນການເຊື່ອມຕໍ່ນັ້ນເອງ.
ເຮັດໃຫ້ຊັດວ່າໃຜຮັບຜິດຊອບຄຳຕອບສະຕຣີມ
import httpx
limits = httpx.Limits(
max_connections=1,
max_keepalive_connections=1,
)
timeout = httpx.Timeout(
connect=5, read=10, write=10, pool=1
)
with httpx.Client(
proxy="http://203.0.113.10:8080",
trust_env=False,
limits=limits,
timeout=timeout,
) as client:
with client.stream("GET", "https://example.com/") as response:
print(response.status_code)
for chunk in response.iter_bytes():
print(len(chunk))
next_response = client.get("https://example.com/")
print(next_response.status_code)
ປ່ຽນທີ່ຢູ່ພຣັອກຊີຕົວຢ່າງກ່ອນຮັນ. ຄຳຮ້ອງຂໍຖັດໄປເລີ່ມຫຼັງອອກຈາກບໍລິບົດສະຕຣີມ. ການອອກນັ້ນປິດຄຳຕອບແມ່ນແຕ່ໂຄດຢຸດລູບ ຫຼືເກີດຂໍ້ຍົກເວັ້ນ.
ເມື່ອສະຕຣີມແບບຈັດການເອງ ເຊັ່ນ client.send(request, stream=True) ໂຄດຂອງທ່ານຮັບຜິດຊອບການປິດສຸດທ້າຍ. ສຳລັບ AsyncClient ຕ້ອງລໍການເກັບກວາດເອງທີ່ກົງກັນດ້ວຍ response.aclose(). ປິດຄຳຕອບທີ່ຍັງບໍ່ອ່ານຄືນຄວາມຈຸ ແຕ່ອາດຕ້ອງຖິ້ມການເຊື່ອມຕໍ່ຂ້າງລຸ່ມແທນໃຊ້ຊ້ຳ.
ອ່ານຊື່ຂໍ້ຍົກເວັ້ນ
ConnectTimeout ກ່ຽວກັບການສ້າງການເຊື່ອມຕໍ່. ReadTimeout ກ່ຽວກັບລໍຂໍ້ມູນຄຳຕອບ. PoolTimeout ກ່ຽວກັບການໄດ້ຊ່ອງການເຊື່ອມຕໍ່. ບັນທຶກແຕ່ «ພຣັອກຊີໝົດເວລາ» ຈະເສຍຄວາມຕ່າງທີ່ໃຊ້ເລືອກວິທີແກ້.
ກວດຄຳຕອບທີ່ເປີດ ວຽກພ້ອມກັນ ແລະຂີດຈຳກັດການເຊື່ອມຕໍ່ກ່ອນປ່ຽນ IP ຈຸດເຊື່ອມຕໍ່. ພູລທີ່ໃຫຍ່ອາດເໝາະກັບພາລະວຽກພ້ອມກັນທີ່ສົມເຫດຜົນ ແຕ່ບໍ່ແກ້ຄຳຕອບທີ່ບໍ່ເຄີຍປິດ. ມັນພຽງໃຫ້ແອັບມີຄວາມຈຸຫຼາຍຂຶ້ນເພື່ອຄອບຄອງ.
ເກັບໄຄລເອັນໄວ້ໃຊ້ຊ້ຳຕະຫຼອດພາລະວຽກ. ສ້າງໄຄລເອັນໃໝ່ເພື່ອໃຫ້ແຕ່ລະຄຳຮ້ອງຂໍເບິ່ງຄືເຮັດວຽກໄດ້ອາດເຊື່ອງບັນຫາວົງຈອນຊີວິດ ແລະເສຍການໃຊ້ການເຊື່ອມຕໍ່ຊ້ຳ.