2017-12-16 105 views
6

वर्तमान में मैं अपने grequest आवरण के लिए कनेक्शन पुनः की अधिकतम संख्या निर्धारित करने के लिए निम्न करें:क्या एक ही सत्र में सभी पूल कनेक्शन के बीच साझा की गई अधिकतम संख्या में रीट्री सेट करना संभव है?

self._s = Session() 
retries = Retry(total=5, status_forcelist=[500, 502, 503, 504]) 
self._s.mount('http://, HTTPAdapter(max_retries=retries)) 

मैं तो तर्क के रूप में सत्र self._s साथ grequest वस्तुओं का एक समूह बना सकते हैं। उदाहरण के लिए, GET अनुरोधों का एक सेट बना कुछ इस तरह का उपयोग किया जा जाएगा:

requests = [grequests.get(url, ..., 'session': self._s')]

अंत में, इन सभी अंततः grequests.map(requests, ...) का उपयोग कर जारी किए जाते हैं।

समस्या यह है कि मैं अधिकतम संख्या में रीट्रीज़ बनाने का एक तरीका चाहता हूं और कनेक्शन पूल के सभी कनेक्शनों में साझा किया जाए। पुनः प्रयास अभी भी एक व्यक्तिगत कनेक्शन के आधार पर लागू किया प्रतीत होता है। क्या ऐसा करने का कोई संभावित तरीका है? क्या यह संभव नहीं है क्योंकि कुल Retry() ऑब्जेक्ट्स कुल कॉल से प्रत्येक कमी पर बनाई गई हैं?

उत्तर

0

मुझे लगता है कि आप भाग्य से बाहर हैं। Retry docstring कहते हैं (अंश):

प्रत्येक पुन: प्रयास प्रयास अद्यतन मूल्यों के साथ एक नया पुन: प्रयास वस्तु बन जाएगा, ताकि वे सुरक्षित रूप से पुन: उपयोग किया जा सकता है।

तो एक नई वस्तु बनाई गई है, जैसा कि आपने कहा था, हर कनेक्शन ... और यह डिज़ाइन द्वारा किया जाता है।

इसके अलावा, Retry ऑब्जेक्ट स्वयं थ्रेडिंग के लिए अनुमति देता है: यह कनेक्शन प्रयासों के बीच सो जाता है। तो इस डिजाइन द्वारा Retry ऑब्जेक्ट एक थ्रेड से जुड़ा होना चाहिए। माफ़ कीजिये। अगर मदद करता है तो urllib.utils.retry का एक लिंक यहां दिया गया है।

संबंधित मुद्दे