2011-02-12 11 views
5

मेरे पास एक बड़ी स्क्रैपिंग नौकरी है - अधिकांश स्क्रिप्ट का समय नेटवर्क विलंबता के कारण अवरुद्ध हो रहा है। मैं तो मैं एक साथ एक से अधिक अनुरोध कर सकते हैं स्क्रिप्ट बहु-थ्रेड कोशिश कर रहा हूँ, लेकिन मेरे धागे का लगभग 10% निम्न त्रुटिपायथन में बहु-थ्रेडेड वेब अनुरोध - 'नाम या सेवा ज्ञात नहीं है'

URLError: <urlopen error [Errno -2] Name or service not known> 

अन्य 90 सफलतापूर्वक% पूर्ण के साथ मर जाते हैं। मैं एक ही डोमेन से कई पेजों का अनुरोध कर रहा हूं, ऐसा लगता है कि कुछ DNS समस्या हो सकती है। मैं एक समय में 25 अनुरोध करता हूं (25 धागे)। सब कुछ ठीक काम करता है अगर मैं एक समय में 5 अनुरोधों को सीमित करता हूं, लेकिन एक बार जब मैं लगभग 10 अनुरोध प्राप्त करता हूं, तो मैं कभी-कभी यह त्रुटि देखना शुरू कर देता हूं।

मैंने Repeated host lookups failing in urllib2 पढ़ा है जो मेरे पास एक ही मुद्दे का वर्णन करता है और इसमें सुझावों का पालन करता है, लेकिन इसका कोई फायदा नहीं हुआ।

मैंने बहु-थ्रेडिंग के बजाय मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करने का भी प्रयास किया है, मुझे वही व्यवहार मिलता है - प्रक्रियाओं का लगभग 10% एक ही त्रुटि के साथ मर जाता है - जो मुझे विश्वास दिलाता है कि यह urllib2 के साथ कोई समस्या नहीं है लेकिन कुछ और।

क्या कोई यह बता सकता है कि क्या हो रहा है और सुझाव कैसे दिया जाए?

अद्यतन

मैं मैन्युअल रूप से मेरी स्क्रिप्ट सब कुछ में साइट के आईपी पते कोड तो पूरी तरह से काम करता है, तो यह त्रुटि DNS लुकअप के दौरान कुछ समय होता है।

+0

क्या आपके पास सर्वर तक पहुंच है? आप कुछ एंटी-इनकार-ऑफ-सर्विस सामानों में चल रहे हैं, या यदि सर्वर भारी वजन नहीं है, तो आप वास्तव में इसे अधिभारित कर सकते हैं ... – jswolf19

+0

यह एक प्रमुख वेबसाइट है जो सैकड़ों को संभालने में सक्षम है या हजारों एक साथ अनुरोध, मेरे 25 एक छोटे से दांत भी नहीं बनाते हैं। मुझे पूरा यकीन है कि यह एक डीएनएस रिज़ॉल्यूशन मुद्दा है, क्योंकि यदि मैं आईपी पते के साथ डोमेन नाम को प्रतिस्थापित करता हूं तो मेरी स्क्रिप्ट पूरी तरह से चलती है - इसलिए वेबसाइट स्पष्ट रूप से मुझे बंद नहीं कर रही है। इस बिंदु पर मैं सिर्फ यह समझना चाहता हूं कि DNS लुकअप विफल क्यों हो रहा है। –

+0

फिर यह DNS सर्वर के साथ एक समस्या हो सकती है जो केवल एक निश्चित समय पर ग्राहक से इतने सारे अनुरोधों की अनुमति देती है, या आप क्या हैं। – jswolf19

उत्तर

1

सुझाव: nscd जैसे आपके सिस्टम में DNS कैश को सक्षम करने का प्रयास करें। यदि आपका स्क्रैपर हमेशा एक ही डोमेन पर अनुरोध करता है तो इसे DNS लुकअप समस्याओं को खत्म करना चाहिए।

सुनिश्चित करें कि urllib2.urlopen द्वारा लौटाई गई फ़ाइल ऑब्जेक्ट्स को संसाधनों को मुक्त करने के लिए पढ़ने के बाद ठीक से बंद कर दिया गया है। अन्यथा, आप अपने सिस्टम में अधिकतम खुले सॉकेट की सीमा तक पहुंच सकते हैं।

इसके अलावा, politeness policy खाते में ध्यान दें, वेब क्रॉलर को एकाधिक अनुरोधों वाले सर्वर को ओवरलोड करने से बचना चाहिए।

+1

मैंने इन दोनों चीजों को किया है, मेरे पोस्ट में जुड़े अन्य स्टैक ओवरफ़्लो प्रश्न इन दोनों सुझावों को बनाता है, लेकिन यह मेरी समस्या का समाधान नहीं करता है। डोमेन के बजाय सीधे आईपी पते का उपयोग करना, लेकिन मुझे समझ में नहीं आता कि एनएससीडी इस समस्या को हल क्यों नहीं करता है, क्योंकि ऐसा लगता है कि यह DNS कैशिंग से संबंधित है। –

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