यह न केवल max_retries को बदल देगा, बल्कि एक बैकऑफ़ रणनीति को भी सक्षम करेगा जो सभी http: // पते को पुनः प्रयास करने से पहले कुछ समय के लिए सोता है (कुल 5 बार):
import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
s = requests.Session()
retries = Retry(total=5,
backoff_factor=0.1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.get('http://httpstat.us/500')
के लिए प्रलेखन केRetry
अनुसार : यदि बैकऑफ_फैक्टर 0.1 है , तो रिट्रीट के बीच [0.1s, 0.2s, 0.4s, ...] के लिए सो जाएगा ()। यदि स्थिति कोड 500 , 502 , 503 या 504 है , तो यह रिट्री को भी बाध्य करेगा ।
Retry
अधिक दानेदार नियंत्रण के लिए अनुमति देने के लिए कई अन्य विकल्प :
- कुल - रिट्रीट की कुल संख्या अनुमति देने के लिए।
- कनेक्ट - कितने कनेक्शन से संबंधित त्रुटियों पर पुन: प्रयास करने के लिए।
- read - कितनी बार रीड एरर पर रिट्रीट करना पड़ता है।
- रीडायरेक्ट - कितने रीडायरेक्ट करने के लिए।
- method_whitelist - अपरिपक्व HTTP सिस्टम का सेट क्रिया है जिसे हमें पुनः प्रयास करना चाहिए।
- status_forcelist - HTTP स्टेटस कोड्स का एक सेट जिसे हमें एक रिट्री पर बल देना चाहिए।
- backoff_factor - प्रयासों के बीच आवेदन करने के लिए एक बैकऑफ़ कारक।
- raise_on_redirect - या नहीं, यदि रीडायरेक्ट की संख्या समाप्त हो रहा है, एक को बढ़ाने के लिए
MaxRetryError
, या में एक प्रतिक्रिया कोड वाला एक प्रतिक्रिया वापस जाने के लिए 3xx रेंज।
- raise_on_status - करने के लिए इसी तरह के अर्थ raise_on_redirect : कि क्या हम एक अपवाद उठाना चाहिए, या एक प्रतिक्रिया वापस, स्थिति में गिर जाता है status_forcelist रेंज और पुनः समाप्त हो चुकी है।
NB : raise_on_status अपेक्षाकृत नया है, और इसे अभी तक urllib3 या अनुरोधों की रिलीज़ में नहीं बनाया है। ऐसाप्रतीत होता है कि up_on_status कीवर्ड तर्क को मानक संस्करण 3.6 में सबसे अधिक लाइब्रेरी में बनाया गया है।
विशिष्ट HTTP स्थिति कोड पर अनुरोधों को पुन: प्रयास करने के लिए, status_forcelist का उपयोग करें । उदाहरण के लिए, status_forcelist = [503] स्थिति कोड 503 (सेवा अनुपलब्ध) पर पुनः प्रयास करेगा ।
डिफ़ॉल्ट रूप से, पुनर्प्रयास केवल इन शर्तों के लिए आग लगाता है:
- पूल से कनेक्शन नहीं मिल सका।
TimeoutError
HTTPException
उठाया ( http.client से पायथन 3 में अन्य नग्लिब )। ऐसा लगता है कि निम्न स्तर के HTTP अपवाद हैं, जैसे URL या प्रोटोकॉल सही तरीके से नहीं बना है।
SocketError
ProtocolError
ध्यान दें कि ये सभी अपवाद हैं जो एक नियमित HTTP प्रतिक्रिया को प्राप्त होने से रोकते हैं। यदि कोई नियमित प्रतिक्रिया उत्पन्न होती है, तो कोई पुन: प्रयास नहीं किया जाता है। Status_forcelist का उपयोग किए बिना , यहां तक कि स्थिति 500 के साथ एक प्रतिक्रिया भी वापस नहीं ली जाएगी।
एक दूरस्थ एपीआई या वेब सर्वर के साथ काम करने के लिए अधिक सहज ज्ञान युक्त तरीके से व्यवहार करने के लिए, मैं उपरोक्त कोड स्निपेट का उपयोग करूंगा, जो 500 , 502 , 503 और 504 स्थितियों पर पीछे हटता है। सभी असामान्य नहीं हैं। वेब और (संभवतः) पुनर्प्राप्त करने योग्य को एक बड़ा पर्याप्त बैकऑफ़ अवधि दी गई है।
संपादित करें : urllib3Retry
से सीधे आयात वर्ग ।