मैं हाल ही में this document पढ़ रहा था जिसमें सॉकेट सर्वर को लागू करने के लिए नियोजित कई रणनीतियों की सूची दी गई है। अर्थात्, वे हैं:पायथन में सॉकेट-आधारित सर्वर लिखने, अनुशंसित रणनीतियों?
- प्रत्येक थ्रेड के साथ कई ग्राहकों की सेवा, और nonblocking आई/ओ और स्तर ट्रिगर तत्परता अधिसूचना का प्रयोग
- प्रत्येक थ्रेड के साथ कई ग्राहकों की सेवा, और nonblocking आई/ओ और तत्परता परिवर्तन सूचना का उपयोग
- प्रत्येक सर्वर धागे से कई ग्राहकों की सेवा, और प्रयोग अतुल्यकालिक मैं/हे
- प्रत्येक सर्वर धागे से एक ग्राहक सेवा, और अवरुद्ध I/O
- का उपयोग गिरी
अब, मैं एक संकेत की सराहना करता हूं जिस पर का उपयोग सीपीथॉन में किया जाना चाहिए, जिसे हम जानते हैं कि कुछ अच्छे अंक हैं, और कुछ बुरे बिंदु हैं। मैं अधिकतर उच्च सहमति के तहत प्रदर्शन में रूचि रखता हूं, और हां, वर्तमान में कई कार्यान्वयन बहुत धीमे हैं।
तो यदि मैं आसान से शुरू कर सकता हूं, तो "5" बाहर है, क्योंकि मैं कर्नेल में कुछ भी हैकिंग नहीं कर रहा हूं।
"4" ऐसा लगता है कि यह जीआईएल के कारण बाहर होना चाहिए। बेशक, आप थ्रेड के स्थान पर मल्टीप्रोसेसिंग का उपयोग कर सकते हैं, और इससे महत्वपूर्ण बढ़ावा मिलता है। आईओ को अवरुद्ध करने के लिए समझने में आसान होने का लाभ भी है।
"1" पारंपरिक का चयन करें या चुनाव जो trivially बहु के साथ जोड़ा जा सकता है:
और यहाँ मेरी जानकारी एक सा क्षीण हो जाती है।
"2" तत्परता-परिवर्तन सूचना, नए epoll द्वारा इस्तेमाल किया और kqueue है
"3" मुझे यकीन है कि है कि अजगर रैपर इस के लिए किसी भी गिरी कार्यान्वयन देखते हैं नहीं कर रहा हूँ।
तो, पायथन में हमारे पास ट्विस्ट जैसे महान उपकरण हैं। शायद वे एक बेहतर दृष्टिकोण हैं, हालांकि मैंने ट्विस्टेड बेंचमार्क किया है और इसे एकाधिक प्रोसेसर मशीन पर बहुत धीमा पाया है। शायद लोड बैलेंसर वाले 4 मोड़ होने से यह हो सकता है, मुझे नहीं पता। किसी भी सलाह की सराहना की जाएगी।
कहा था कि मुझे लगता है कि एपॉल 2.6+ में stdlib में है, और 2.5 के लिए easy_installable है। पैकेज को चुनिंदा-कुछ कहा जाता है। अस्पष्टता के लिए खेद है। –
ट्विस्ट भी एपोल का उपयोग कर सकते हैं। वास्तव में, ट्विस्टेड सभी समर्थित ईवेंट-अधिसूचना एपीआई को एक समान एपीआई में बदल देता है जो यह आपको प्रस्तुत करता है। तो यदि मंच सबसे अच्छा विकल्प चुन सकता है, तो आपका ऐप चुनने का उपयोग करता है। यदि इसमें एपोल है, तो आपका ऐप एपोल का उपयोग करता है। आप सभी पारदर्शी रूप से। –
यह 'asyncore' – new123456