ฉันต้องการเพิ่มการหมดเวลาเริ่มต้นลงในโค้ดจำนวนมากได้อย่างง่ายดาย (สมมติว่าการหมดเวลาช่วยแก้ปัญหาของคุณได้)
นี่เป็นวิธีแก้ปัญหาที่ฉันเลือกจากตั๋วที่ส่งไปยังที่เก็บสำหรับการร้องขอ
เครดิต: https://github.com/kennethreitz/requests/issues/2011#issuecomment-477784399
วิธีแก้ปัญหาคือสองสามบรรทัดสุดท้ายที่นี่ แต่ฉันแสดงรหัสเพิ่มเติมเพื่อบริบทที่ดีขึ้น ฉันชอบที่จะใช้เซสชันเพื่อลองพฤติกรรมใหม่
import requests
import functools
from requests.adapters import HTTPAdapter,Retry
def requests_retry_session(
retries=10,
backoff_factor=2,
status_forcelist=(500, 502, 503, 504),
session=None,
) -> requests.Session:
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
for method in ('get', 'options', 'head', 'post', 'put', 'patch', 'delete'):
setattr(session, method, functools.partial(getattr(session, method), timeout=30))
return session
จากนั้นคุณสามารถทำสิ่งนี้:
requests_session = requests_retry_session()
r = requests_session.get(url=url,...