2012-09-14 15 views
5

मैं समानांतर में कई अलग-अलग डोमेन से पृष्ठों को डाउनलोड करने के लिए स्केपर का उपयोग कर रहा हूं। मेरे पास डाउनलोड करने के लिए सैकड़ों हजारों पेज हैं, इसलिए प्रदर्शन महत्वपूर्ण है।मैं स्कैर की डाउनलोड गति में सुधार कैसे करूं?

दुर्भाग्यवश, जैसा कि मैंने स्केल की गति का प्रोफाइल किया है, मुझे केवल प्रति सेकंड कुछ पेज मिल रहे हैं। वास्तव में, औसतन प्रति पृष्ठ लगभग 2 पृष्ठ। मैंने पहले अपने मल्टीथ्रेड किए गए मकड़ियों को प्रति सेकंड सैकड़ों पृष्ठों को करने के लिए लिखा है - मैंने सोचा कि निश्चित रूप से मुंह के उपयोग के लिए स्केप का उपयोग, इसी तरह के जादू के लिए सक्षम होगा।

मैं स्कैपर को कैसे गति दूं? मुझे वास्तव में ढांचे पसंद है, लेकिन यह प्रदर्शन मुद्दा मेरे लिए एक सौदा-ब्रेकर हो सकता है।

यहां सेटिंग्स.py फ़ाइल का प्रासंगिक हिस्सा है। क्या मुझे कुछ महत्वपूर्ण सेटिंग याद आई है?

LOG_ENABLED = False 
CONCURRENT_REQUESTS = 100 
CONCURRENT_REQUESTS_PER_IP = 8 

कुछ पैरामीटर:

  • scrapy संस्करण 0.14
  • परियोजना एक EC2 बड़े उदाहरण पर तैनात किया जाता है, तो स्मृति, CPU, और बैंडविड्थ के साथ खेलने के लिए बहुत सारे किया जाना चाहिए का उपयोग करना।
  • मैं जेएसओएन प्रोटोकॉल का उपयोग करके क्रॉलिंग शेड्यूल कर रहा हूं, क्रॉलर को किसी भी समय कुछ दर्जन समवर्ती क्रॉल के साथ शीर्ष पर रखा गया है।
  • जैसा कि मैंने शुरुआत में कहा था, मैं कई साइटों से पेज डाउनलोड कर रहा हूं, इसलिए दूरस्थ सर्वर प्रदर्शन और CONCURRENT_REQUESTS_PER_IP चिंता नहीं होनी चाहिए।
  • इस पल के लिए, मैं बहुत कम पोस्ट-प्रोसेसिंग कर रहा हूं। कोई xpath नहीं; कोई regex नहीं; मैं बस प्रत्येक पृष्ठ के लिए यूआरएल और कुछ बुनियादी आंकड़े बचा रहा हूं। (यह बाद में बदल जाएगा एक बार मैं बुनियादी प्रदर्शन अवरोधों को हटाने के काम मिलता है।)
+0

स्क्रैप बहुत तेज़ हो जाता है। क्या यह सीपीयू बाध्य है या यह निष्क्रिय दिखाई देता है? क्या यह शुरुआत से धीमा है, या प्रदर्शन खराब हो जाता है? –

+0

यह शुरुआत से धीमा है। एडब्ल्यूएस मशीन को 100% सीपीयू पर चल रहा है, लेकिन मुझे लगता है कि मुड़ता हुआ रिएक्टर हमेशा ऐसा करता है। मशीन अभी भी एसएसएच कमांड, नए HTTP अनुरोध इत्यादि के लिए घबराहट और उत्तरदायी है – Abe

+1

पिछले घंटे के लिए इस पर काम करना, मुझे एक समस्या है कि समस्या स्कैरेड के लिए सेवा कॉन्फ़िगरेशन फ़ाइलों में है। मैंने स्केपर डेमॉन को पुनरारंभ करने के बारे में एक अलग प्रश्न शुरू कर दिया है: http://stackoverflow.com/questions/12428143/how-do-i-restart-the-scrapyd-daemon – Abe

उत्तर

9

मैं अतीत में इस समस्या थी ... और यह एक बड़ा हिस्सा मैं एक 'डर्टी' पुराने मुश्किल के साथ हल किया।

Do a local cache DNS

अधिकतर जब आपके पास यह उच्च सीपीयू उपयोग एक साथ दूरस्थ साइटों तक पहुंच जाता है तो ऐसा इसलिए होता है क्योंकि स्केपर यूआरएल को हल करने का प्रयास कर रहा है।

और कृपया अपने स्थानीय कैशिंग DNS सर्वर पर होस्ट (/etc/resolv.conf) पर अपनी डीएनएस सेटिंग्स को बदलना याद रखें।

पहले में धीरे-धीरे हो जाएगा, लेकिन जैसे ही यह कैशिंग शुरू होता है और यह अधिक कुशल हल हो रहा है कि आप बड़े सुधार देख रहे हैं।

मुझे आशा है कि इससे आपकी समस्या में आपकी मदद मिलेगी!

+0

महान उत्तर !!!! – KJW

+3

[स्केपर डॉक्टर] के अनुसार (http://doc.scrapy.org/en/latest/topics/settings.html#dnscache-enabled), डिफ़ॉल्ट रूप से 'DNSCACHE_ENABLED'' True' है। – AliBZ

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