इस समस्या को हल करने के लिए एक अच्छा तरीका यह है कि पहले एक परिणाम प्राप्त करने के लिए आवश्यक कोड लिखें, फिर एप्लिकेशन को समानांतर करने के लिए थ्रेडिंग कोड को शामिल करें।
एक आदर्श दुनिया में इसका मतलब बस एक साथ 100,000 धागे शुरू करना होगा, जो बाद में प्रसंस्करण के लिए एक शब्दकोश या सूची में अपने परिणामों का उत्पादन करता है, लेकिन व्यवहार में आप कितने समानांतर HTTP अनुरोधों को इस फैशन में जारी कर सकते हैं, इसमें सीमित हैं। स्थानीय रूप से, आपके पास कितने सॉकेट हैं जिन्हें आप समवर्ती रूप से खोल सकते हैं, आपके पायथन दुभाषिया को निष्पादन के कितने धागे अनुमति देंगे। दूरस्थ रूप से, आप एक साथ कनेक्शन की संख्या में सीमित हो सकते हैं यदि सभी अनुरोध एक सर्वर या कई के खिलाफ हैं। इन सीमाओं को शायद इस बात की आवश्यकता होगी कि आप स्क्रिप्ट को इस तरह से लिखें जैसे कि किसी एक समय में केवल URL के एक छोटे से हिस्से को प्रदूषित करें (100, जैसा कि एक अन्य पोस्टर में उल्लेख किया गया है, संभवतः एक सभ्य थ्रेड पूल आकार है, हालांकि आप पा सकते हैं कि आप सफलतापूर्वक कई और तैनात कर सकते हैं)।
उपरोक्त समस्या को हल करने के लिए आप इस डिज़ाइन पैटर्न का अनुसरण कर सकते हैं:
- एक थ्रेड प्रारंभ करें जो वर्तमान में चल रहे थ्रेड्स की संख्या तक नए थ्रेड लॉन्च करता है (आप थ्रेडिंग के माध्यम से उन्हें ट्रैक कर सकते हैं। सक्रिय_काउंट) (या थ्रेड ऑब्जेक्ट्स को डेटा संरचना में धकेलकर)> = = आपकी अधिकतम संख्या एक साथ अनुरोध (100) , तो कम समय के लिए सोता है। जब प्रक्रिया के लिए अधिक URL नहीं हैं, तो यह थ्रेड समाप्त हो जाना चाहिए। इस प्रकार, धागा जागते रहेंगे, नए धागे लॉन्च करेंगे, और जब तक आपका काम पूरा नहीं हो जाता, तब तक सोते रहेंगे।
- अनुरोध थ्रेड बाद के पुनः प्राप्ति और आउटपुट के लिए कुछ डेटा संरचना में अपने परिणाम संग्रहीत करते हैं। यदि आप जिस संरचना में परिणाम जमा कर रहे हैं, वह एक
list
या dict
सीपीथॉन में है, तो आप ताले के बिना अपने थ्रेड्स से अद्वितीय वस्तुओं को सुरक्षित रूप से जोड़ सकते हैं या सम्मिलित कर सकते हैं , लेकिन यदि आप किसी फ़ाइल में लिखते हैं या अधिक जटिल क्रॉस-थ्रेड डेटा इंटरैक्शन की आवश्यकता होती है, तो आपको एक का उपयोग करना चाहिए इस राज्य को भ्रष्टाचार से बचाने के लिए आपसी बहिष्कार ताला ।
मेरा सुझाव है कि आप थ्रेडिंग मॉड्यूल का उपयोग करें । आप इसे थ्रेडिंग लॉन्च करने और ट्रैक करने के लिए उपयोग कर सकते हैं। पायथन के थ्रेडिंग समर्थन नंगे हैं, लेकिन आपकी समस्या का वर्णन बताता है कि यह आपकी आवश्यकताओं के लिए पूरी तरह से पर्याप्त है।
अंत में, यदि आप Python में लिखे गए समानांतर नेटवर्क अनुप्रयोग का एक बहुत ही सीधा आवेदन देखना चाहते हैं, तो ssh.py की जाँच करें । यह एक छोटा पुस्तकालय है जो कई एसएसएच कनेक्शनों को समानांतर करने के लिए पायथन थ्रेडिंग का उपयोग करता है। डिजाइन आपकी आवश्यकताओं के काफी करीब है कि आप इसे एक अच्छा संसाधन मान सकते हैं।