2017-07-24 11 views
6

अजगर के अनुरोध पुस्तकालय केवल का समर्थन करता है पर टाइमआउट कनेक्ट और पढ़ http://docs.python-requests.org/en/master/user/advanced/#timeoutsकैसे अजगर के अनुरोध पुस्तकालय पर टाइमआउट मजबूर करने के लिए (DNS लुकअप सहित)

जब DNS लुकअप एक बहुत लेता है एक समय समाप्ति के लिए मजबूर करने का कोई तरीका नहीं है लंबे समय तक। जीईटी अनुरोध (डीएनएस सहित, कनेक्ट और पढ़ने सहित) को पूरा करने के लिए एक्स सेकंड से अधिक समय लगने पर मैं समय निकालना चाहता हूं।

ध्यान दें कि मैं सिग्नल आधारित दृष्टिकोण का उपयोग नहीं कर सकता क्योंकि यह केवल मुख्य धागे में काम करता है।

मैं एक सुरुचिपूर्ण समाधान की तलाश में हूं।

+0

आपको इसके लिए 'urllib3' या' सॉकेट' में कुछ बंदर पैच की आवश्यकता होगी .. –

उत्तर

2

मुझे नहीं लगता कि सिग्नल के अलावा अंतर्निहित getaddrinfo सी मानक लाइब्रेरी फ़ंक्शन को बाधित करना संभव है।

तो IMHO आप केवल बहु प्रसंस्करण के साथ आपकी समस्या को दूर कर सकते हैं - एक सुरुचिपूर्ण दृष्टिकोण timeout_decorator मॉड्यूल का उपयोग कर उदाहरण के लिए:

@timeout_decorator.timeout(5, use_signals=False) 
def timed_get(url): 
    return requests.get(url) 

लेकिन याद रखें कि यह प्रत्येक अनुरोध के लिए एक प्रक्रिया पैदा करेगा।

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