อัปเดต: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
ในเวอร์ชันใหม่ของrequests
:
หากคุณระบุค่าเดียวสำหรับการหมดเวลาเช่นนี้:
r = requests.get('https://github.com', timeout=5)
ค่าการหมดเวลาจะถูกนำไปใช้กับทั้งconnect
และread
หมดเวลา ระบุ tuple หากคุณต้องการตั้งค่าแยก:
r = requests.get('https://github.com', timeout=(3.05, 27))
หากเซิร์ฟเวอร์ระยะไกลช้ามากคุณสามารถบอกให้คำขอรอตลอดการตอบกลับโดยผ่านไม่มีค่าการหมดเวลาแล้วเรียกกาแฟหนึ่งถ้วย
r = requests.get('https://github.com', timeout=None)
คำตอบเก่า (อาจล้าสมัย) ของฉัน (ซึ่งโพสต์เมื่อนานมาแล้ว):
มีวิธีอื่นในการเอาชนะปัญหานี้:
1. ใช้TimeoutSauce
คลาสภายใน
จาก: https://github.com/kennethreitz/requests/issues/1928#issuecomment-35811896
import requests from requests.adapters import TimeoutSauce
class MyTimeout(TimeoutSauce):
def __init__(self, *args, **kwargs):
connect = kwargs.get('connect', 5)
read = kwargs.get('read', connect)
super(MyTimeout, self).__init__(connect=connect, read=read)
requests.adapters.TimeoutSauce = MyTimeout
รหัสนี้ควรทำให้เราตั้งค่าการหมดเวลาการอ่านเท่ากับการหมดเวลาเชื่อมต่อซึ่งเป็นค่าการหมดเวลาที่คุณส่งผ่านการเรียก Session.get () (โปรดทราบว่าฉันไม่ได้ทดสอบโค้ดนี้จริง ๆ ดังนั้นจึงอาจต้องมีการดีบักอย่างรวดเร็วฉันเพิ่งเขียนมันลงในหน้าต่าง GitHub โดยตรง)
2. ใช้คำขอแยกจาก kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout
จากเอกสารของ: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
หากคุณระบุค่าเดียวสำหรับการหมดเวลาเช่นนี้:
r = requests.get('https://github.com', timeout=5)
ค่าการหมดเวลาจะถูกนำไปใช้กับทั้งการเชื่อมต่อและการหมดเวลาการอ่าน ระบุ tuple หากคุณต้องการตั้งค่าแยก:
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburke ขอให้รวมเข้ากับโครงการคำขอหลัก แต่ยังไม่ได้รับการยอมรับ