2010-08-20 16 views
8

संभव डुप्लिकेट में:
How can I speed up fetching pages with urllib2 in python?एक ही बार में एकाधिक यूआरएल को पुनः प्राप्त/समानांतर

मैं एक अजगर स्क्रिप्ट जो वेब पेज डाउनलोड है, यह पार्स और पृष्ठ से कुछ मान। अंतिम परिणाम प्राप्त करने के लिए मुझे ऐसे कुछ पृष्ठों को स्क्रैप करने की आवश्यकता है। प्रत्येक पृष्ठ पुनर्प्राप्त करने में लंबा समय लगता है (5-10s) और मैं प्रतीक्षा समय को कम करने के समानांतर में अनुरोध करना पसंद करूंगा।
सवाल यह है कि - कौन सा तंत्र इसे त्वरित, सही ढंग से और न्यूनतम CPU/मेमोरी अपशिष्ट के साथ करेगा? मुड़, एसिंककोर, थ्रेडिंग, कुछ और? क्या आप उदाहरणों के साथ कुछ लिंक प्रदान कर सकते हैं?
धन्यवाद

यूपीडी: समस्या के लिए कुछ समाधान हैं, मैं गति और संसाधनों के बीच समझौता की तलाश में हूं। यदि आप कुछ अनुभव विवरण बता सकते हैं - यह आपके विचार से लोड के तहत तेज़ कैसे है, आदि - यह बहुत उपयोगी होगा।

+0

मेरा जवाब यहां देखें http://stackoverflow.com/questions/3491455 –

उत्तर

13

multiprocessing.Pool एक अच्छा सौदा हो सकता है, some useful examples हैं। उदाहरण के लिए आप यूआरएल की एक सूची है, तो आप एक समवर्ती तरह से सामग्री पुनर्प्राप्ति मैप कर सकते हैं:

def process_url(url): 
    # Do what you want 
    return what_you_want 

pool = multiprocessing.Pool(processes=4) # how much parallelism? 
pool.map(process_url, list_of_urls) 
+0

बस किसी और को चेतावनी के रूप में, मुझे यकीन नहीं है कि क्यों, लेकिन कोड चलाने के कुछ सेकंड के भीतर, यह मेरी प्रणाली को एक लाता है पूरा बंद करो। – Peter

+0

हाँ, इसके बारे में। किसी भी प्रणाली को एक ही समय में 12 bazillion चीजें करने के लिए कहकर अन्य कार्यों को संसाधित करने में थोड़ी देर देरी हो सकती है। जबरदस्त हंसी। –

3

multiprocessing

स्पोन प्रक्रियाओं का एक समूह, प्रत्येक URL डाउनलोड करना चाहते के लिए एक। यूआरएल की सूची रखने के लिए Queue का उपयोग करें, और प्रक्रियाओं को प्रत्येक को कतार से यूआरएल पढ़ने, इसे संसाधित करने और मूल्य वापस करने के लिए करें।

1

एक अतुल्यकालिक है, यानी घटना पर ही आधारित बजाय अवरुद्ध, नेटवर्किंग इस के लिए रूपरेखा का प्रयोग करें। एक विकल्प use twisted है। हाल ही में उपलब्ध एक और विकल्प मोनोकल का उपयोग करना है। यह मिनी-फ्रेमवर्क गैर-अवरुद्ध संचालन की जटिलताओं को छुपाता है। this example देखें। यह दृश्यों के पीछे मुड़ या टर्ननाडो का उपयोग कर सकता है, लेकिन आप वास्तव में इसके बारे में अधिक ध्यान नहीं देते हैं।

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