ฉันกำลังพัฒนาแอปพลิเคชัน โดยต้องจัดการกับการตัดการเชื่อมต่อชั่วคราวบนไคลเอนต์ (อินเทอร์เฟซเครือข่ายล่ม)
ตอนแรกฉันคิดว่าวิธีการด้านล่างนี้ใช้ได้ แต่บางครั้งหากรีสตาร์ทอินเทอร์เฟซเครือข่าย การโทร s.get(url)
จะหยุดทำงานโดยไม่มีกำหนด:
s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=Retry(total=10, connect=10, read=10)))
s.get(url)
ด้วยการเพิ่มอาร์กิวเมนต์คำหลัก timeout=10
ให้กับ s.get(url)
โค้ดจึงสามารถจัดการกับพฤติกรรมการบล็อกนี้ได้แล้ว:
s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=Retry(total=10, connect=10, read=10)))
s.get(url, timeout=10)
เหตุใดการหมดเวลาจึงจำเป็นในการจัดการกรณีที่อินเทอร์เฟซเครือข่ายรีเซ็ตหรือหยุดทำงานชั่วคราว เหตุใด max_retries=Retry(total=10, connect=10, read=10)
จึงไม่สามารถจัดการสิ่งนี้ได้ โดยเฉพาะอย่างยิ่ง เหตุใด s.get()
จึงไม่ได้รับแจ้งว่าอินเทอร์เฟซเครือข่ายออฟไลน์ เพื่อให้สามารถลองเชื่อมต่ออีกครั้งแทนที่จะหยุดทำงาน