2015-03-05 6 views
22

मैं अपने डेटाबेस में सैकड़ों लाखों आइटम को एक आरईएसटी एपीआई के माध्यम से हेडोकू पर क्लाउड सर्वर से AWS EC2 में डेटाबेस में अपलोड कर रहा हूं। मैं पायथन का उपयोग कर रहा हूं और मैं लॉग में निम्नलिखित INFO लॉग संदेश देख रहा हूं।मेरे डेटाबेस में डेटा अपलोड करते समय मैं लगातार "गिराए गए कनेक्शन को रीसेट करना" क्यों देखूं?

[requests.packages.urllib3.connectionpool] [INFO] Resetting dropped connection: <hostname> 

यह "गिरा दिया कनेक्शन के रीसेट" इससे पहले कि मेरे कोड फिर से निष्पादित करने के लिए जारी है कई सेकंड (कभी कभी 30 सेकंड) लेने के लिए लगता है।

  • सबसे पहले यहां क्या हो रहा है और क्यों?
  • दूसरी बात यह है कि कनेक्शन को छोड़ने से रोकने का कोई तरीका है ताकि मैं डेटा को तेज़ी से अपलोड कर सकूं?

आपकी मदद के लिए धन्यवाद। एंड्रयू।

उत्तर

3

यह उन सेवाओं के लिए सामान्य अभ्यास है जो दुरुपयोग (या डीओएस) से बचने के लिए रीस्टफुल एपीआई का पर्दाफाश करते हैं।
यदि आप अपने एपीआई पर जोर दे रहे हैं तो वे आपका कनेक्शन छोड़ देंगे।
ड्रॉप से ​​बचने के लिए थोड़ी देर में अपनी स्क्रिप्ट को थोड़ा सा सोने का प्रयास करें।

+0

मैं स्थानीय मशीन पर फ्लास्क का उपयोग करता हूं और मैं अक्सर अपने एपीआई पर दबाव डालता हूं, क्या मैं इसे कनेक्शन छोड़ने से रोक सकता हूं? – user1140560

8

अनुरोध Keep-Alive by default का उपयोग करता है। Resetting dropped connection, मेरी समझ से, इसका मतलब है कि एक कनेक्शन जिसे जीवित किया जाना चाहिए किसी भी तरह से गिरा दिया गया था। संभावित कारण हैं:

  1. सर्वर Keep-Alive का समर्थन नहीं करता है।
  2. कुछ समय के लिए स्थापित कनेक्शन में कोई डेटा ट्रांसफर नहीं है, इसलिए सर्वर कनेक्शन छोड़ देता है।

अधिक जानकारी के लिए https://stackoverflow.com/a/25239947/2142577 देखें।

5

समस्या वास्तव में है कि सर्वर ने कनेक्शन बंद कर दिया है भले ही क्लाइंट ने अनुरोध किया है कि इसे जीवित रखा जाए।

यह आवश्यक नहीं है क्योंकि सर्वर रखरखाव का समर्थन नहीं करता है, लेकिन हो सकता है कि सर्वर केवल कनेक्शन पर अनुरोधों की एक निश्चित संख्या को अनुमति देने के लिए कॉन्फ़िगर किया गया हो। यह विभिन्न सर्वरों पर अनुरोधों को फैलाने में मदद के लिए किया जा सकता है, लेकिन मुझे लगता है कि यह अभ्यास सर्वर पर चलने वाले खराब लिखित कोड के खिलाफ एक व्यावहारिक रक्षा के रूप में सामान्य/सामान्य था (उदाहरण के लिए PHP) जो सेवा के बाद खुद को साफ नहीं करता है एक अनुरोध (शायद एक त्रुटि स्थिति आदि के कारण)

यदि आपको लगता है कि यह आपके लिए मामला है और आप इन लॉग (जो INFO स्तर पर लॉग इन हैं) नहीं देखना चाहते हैं, तो आप निम्न जोड़ सकते हैं लॉगिंग के उस हिस्से को शांत करने के लिए:

# Really don't need to hear about connections being brought up again after server has closed it 
logging.getLogger("requests.packages.urllib3.connectionpool").setLevel(logging.WARNING) 
संबंधित मुद्दे