ए (लंबे) जबकि पहले मैंने एक वेब-स्पाइडर लिखा था जिसे मैंने एक ही समय में समवर्ती अनुरोधों को सक्षम करने के लिए मल्टीथ्रेड किया था। यह मेरे पाइथन युवाओं में था, जिन दिनों में मुझे जीआईएल और इससे जुड़े विकारों के बारे में पता था, यह मल्टीथ्रेड कोड (IE, समय की अधिकांश सामग्री बस क्रमबद्ध समाप्त हो जाती है!) के लिए बनाता है।
मैं इसे और अधिक मजबूत बनाने और बेहतर प्रदर्शन करने के लिए इस कोड को फिर से काम करना चाहता हूं। मूल रूप से दो तरीके हैं जो मैं यह कर सकता था: मैं 2.6+ में नए मल्टीप्रोसेसिंग मॉड्यूल का उपयोग कर सकता था या मैं किसी प्रकार के रिएक्टर / इवेंट-आधारित मॉडल के लिए जा सकता था। मैं इसके बजाय बाद में करूँगा क्योंकि यह बहुत सरल और कम त्रुटि वाला है।
तो यह प्रश्न इस बात से संबंधित है कि मेरी आवश्यकताओं के लिए कौन सा ढांचा सबसे उपयुक्त होगा। निम्नलिखित विकल्पों की एक सूची है जो मैं अब तक जानता हूं:
- मुड़ : पायथन रिएक्टर चौखटों की दादी: जटिल लगता है और हालांकि थोड़ा फूला हुआ है। एक छोटे से काम के लिए खड़ी सीखने की अवस्था।
- घटना : दोस्तों से lindenlab पर । ग्रीनलेट आधारित ढांचा जो इस प्रकार के कार्यों के लिए तैयार है। मुझे हालांकि कोड पर एक नज़र थी और यह बहुत सुंदर नहीं है: गैर-पेप 8 कंप्लेंट, प्रिंट्स के साथ बिखरे हुए (लोग ऐसा फ्रेमवर्क में क्यों करते हैं !?), एपीआई थोड़ा असंगत लगता है।
- PyEv : अपरिपक्व, अभी इसका इस्तेमाल करने वाला कोई भी नहीं लगता, हालांकि यह कामेच्छा पर आधारित है, इसलिए इसे एक ठोस बैकेंड मिला है।
- asyncore : stdlib से: über निम्न-स्तर, ऐसा लगता है कि बहुत सारे लेगवर्क शामिल हैं, जो मैदान से कुछ पाने के लिए हैं।
- बवंडर : हालांकि यह एक सर्वर उन्मुख उत्पाद है जो सर्वर डायनेमिक वेबसाइटों के लिए डिज़ाइन किया गया है, जिसमें एक एसिंक्स HTTP क्लाइंट और एक साधारण ioloop है । ऐसा लगता है कि यह काम कर सकता है लेकिन ऐसा नहीं है जो इसके लिए इरादा था। [संपादित करें: दुर्भाग्य से विंडोज पर नहीं चलता है, जो इसे मेरे लिए मायने रखता है - इस लंगड़े मंच का समर्थन करने के लिए मेरे लिए यह एक आवश्यकता है]
क्या ऐसा कुछ है जो मैंने बिल्कुल याद किया है? निश्चित रूप से वहाँ एक पुस्तकालय होना चाहिए जो एक सरल एसिंक्स नेटवर्किंग लाइब्रेरी के मीठे-स्पॉट को फिट करता है!
[संपादित करें: बड़ा धन्यवाद करने के लिए intgr करने के लिए अपने सूचक के लिए इस पेज । यदि आप नीचे तक स्क्रॉल करते हैं, तो आप देखेंगे कि परियोजनाओं की एक बहुत अच्छी सूची है, जिसका उद्देश्य इस कार्य को एक या दूसरे तरीके से निपटाना है। यह वास्तव में ऐसा लगता है कि चीजें वास्तव में ट्विस्ट की शुरुआत के बाद से आगे बढ़ी हैं: लोग अब एक पारंपरिक रिएक्टर / कॉलबैक उन्मुख एक के बजाय सह-दिनचर्या आधारित समाधान का पक्ष लेते हैं । इस दृष्टिकोण के लाभ अधिक स्पष्ट कोड हैं: मैंने निश्चित रूप से अतीत में पाया है, खासकर जब बूस्ट के साथ काम कर रहे हैंC ++ में है कि कॉलबैक आधारित कोड उन डिजाइनों को जन्म दे सकता है जो हार्ड-टू-फॉलो हो सकते हैं और अप्रशिक्षित आंख के लिए अपेक्षाकृत अस्पष्ट हैं। सह-रूटीन का उपयोग करने से आपको कोड लिखने की अनुमति मिलती है जो कम से कम थोड़ा अधिक तुल्यकालिक दिखता है। मुझे लगता है कि अब मेरा काम यह देखना है कि इनमें से कौन सी एक लाइब्रेरी मुझे पसंद है और मैं इसे देखूं! खुशी है कि मैंने अब पूछा ...]
[संपादित करें: इस सवाल का अनुसरण करने वाले या इस विषय पर ठोकर खाने वाले किसी भी व्यक्ति की रुचि या किसी भी मायने में इस विषय की परवाह करता है: मुझे इस नौकरी के लिए उपलब्ध उपकरणों की वर्तमान स्थिति का एक बहुत अच्छा लेखन मिला ]
select
आई / ओ मल्टीप्लेक्सिंग के लिए उपयोग करता है । लेकिन आपको बवंडर-प्यूव के साथ इसे एक अच्छा प्रदर्शन प्राप्त करने में सक्षम होना चाहिए । 2. अब Python 3.3+ में asyncio है और इसका बैकपोर्ट ट्रोलियस है जो इसके इवेंट लूप में किसी भी टोरनेडो एप्लिकेशन को चलाने की अनुमति देता है (ट्विस्टेड जल्द ही समर्थित होगा)।