अद्यतन: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
के नए संस्करण में requests
:
यदि आप टाइमआउट के लिए एक एकल मान निर्दिष्ट करते हैं, जैसे:
r = requests.get('https://github.com', timeout=5)
टाइमआउट मान को connect
और read
टाइमआउट दोनों पर लागू किया जाएगा । यदि आप मानों को अलग से सेट करना चाहते हैं तो एक टपल निर्दिष्ट करें:
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-35-3511116
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 () कॉल पर आपके द्वारा पास किए गए टाइमआउट मूल्य है। (ध्यान दें कि मैंने वास्तव में इस कोड का परीक्षण नहीं किया है, इसलिए इसे कुछ त्वरित डिबगिंग की आवश्यकता हो सकती है, मैंने इसे सीधे GHHHH विंडो में लिखा था।)
2. केविनबर्क से अनुरोधों के एक कांटे का उपयोग करें: https://github.com/kevinburke/requests/tree/connect-time
इसके प्रलेखन से: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
यदि आप टाइमआउट के लिए एक एकल मान निर्दिष्ट करते हैं, जैसे:
r = requests.get('https://github.com', timeout=5)
टाइमआउट मान कनेक्ट और रीड टाइमआउट दोनों पर लागू होगा। यदि आप मानों को अलग से सेट करना चाहते हैं तो एक टपल निर्दिष्ट करें:
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburke ने इसे मुख्य अनुरोध परियोजना में विलय करने का अनुरोध किया है, लेकिन इसे अभी तक स्वीकार नहीं किया गया है।