2015-03-25 8 views
5

के लिए उच्च उपलब्धता मैं पाइथन के asyncio मॉड्यूल का उपयोग करके एक एसिंक्रोनस एप्लिकेशन बनाने की कोशिश कर रहा हूं। हालांकि, दस्तावेज़ीकरण पर मुझे जो भी कार्यान्वयन मिल सकता है वह एक इवेंट लूप पर आधारित है।पायथन के एसिन्सीओ

क्या एक ही एप्लिकेशन चलाने वाले एकाधिक ईवेंट लूप लॉन्च करने का कोई तरीका है, इसलिए मैं उच्च उपलब्धता और गलती सहनशीलता प्राप्त कर सकता हूं? दूसरे शब्दों में, मैं अपने नोड्स को नए नोड्स डालने से स्केल आउट करना चाहता हूं जो लोड बैलेंसर के पीछे कोरआउट के निष्पादन को साझा करेंगे।

मुझे लगता है कि एसिंक्रोनस प्रोग्रामिंग और थ्रेड-सुरक्षा के बीच एक अंतर्निहित मुद्दा है, शायद मेरे मन में जो भी है, वह भी संभव नहीं है। यदि हां, तो एसिंक्रोनस आर्किटेक्चर पर इस प्रकार के एसपीओफ़ से कैसे बचें?

+1

क्या आप सार नेटवर्क कोड या विशिष्ट वेब सर्वर जैसे aiohttp के बारे में बात कर रहे हैं? –

+4

आप एकाधिक इवेंट लूप चला सकते हैं, लेकिन मुझे लगता है कि आप शायद अपने एसिंसिओ प्रोग्राम के कई उदाहरणों को चलाने और बैलेंस लोड करने के लिए nginx या किसी अन्य वेबसर्वर का उपयोग करना चाहते हैं। यदि आप यही चाहते हैं, तो मुझे लगता है कि आप serverfault – leech

+1

पर सहायता प्राप्त कर सकते हैं मेरा मानना ​​है कि सिफारिश प्रति प्रक्रिया एक घटना लूप है। यदि एक एकल इवेंट लूप प्रक्रिया गणना की जाती है, तो आप इसे अन्य कोरों पर चलने वाली अन्य प्रक्रियाओं पर क्लोन कर सकते हैं, जैसा कि @leech ने सुझाव दिया है, लेकिन आप केवल गणना कार्यों को खेती से बेहतर कर सकते हैं। मेरा मानना ​​है कि एसिन्सीओ में एक मल्टीप्रोसेसिंग इंटरफेस है, जो मैंने नहीं किया है, अब भी देखा है। –

उत्तर

3

इसके साथ निपटने का मानक तरीका सामने के लोड बैलेंसर के साथ कई सर्वर प्रक्रियाओं (प्रत्येक के अपने ईवेंट लूप के साथ) शुरू करना है। ऐसी प्रत्येक प्रक्रिया आम तौर पर एक से अधिक CPU कोर का उपयोग नहीं कर सकती है, इसलिए हो सकता है कि आपके पास कोर के रूप में कई प्रक्रियाएं हो।

+0

आप कोर के रूप में कम से कम कई प्रक्रियाओं को चाहते हैं। ए 1: 1 अनुपात मानता है कि प्रत्येक प्रक्रिया पूरी तरह से सीपीयू बाध्य है। – acjay

+0

यदि आईओ असीमित है तो प्रक्रिया वास्तव में सीपीयू बाध्य होना चाहिए। क्या आपके पास डेटा है जो यह दिखाता है कि यह मामला नहीं है? (संभवतः संभव हो सकता है, मैंने वास्तव में यथार्थवादी उत्पादन परिदृश्य में इसे सत्यापित नहीं किया था) – nikow

+0

धन्यवाद, मैं मानता हूं कि जाने का तरीका है, विशेष रूप से विचार करना कि मैं माइक्रो-सर्विसेज आर्किटेक्चर के साथ काम कर रहा हूं। डॉकर का उपयोग करके, और संभवतः दर्जनों माइक्रो-सेवा कंटेनर होने के कारण, 1: 1 अनुपात संभव नहीं है, लेकिन मैं @acjay से सहमत हूं। हम सीपीयू बाध्य हो सकते हैं (एसिंक्रोनस आईओ पर विचार कर रहे हैं), लेकिन हो सकता है कि प्रत्येक कंटेनर सिस्टम के एक बहुत ही छोटे हिस्से का प्रतिनिधित्व करता है, इसलिए हम जाने के लिए अच्छा हो सकता है ... अच्छा, यह निश्चित रूप से कवर करने और कुछ मानक बनाने के लिए एक और विषय है। वैसे भी आपके समय के लिए धन्यवाद! –

0

मैंने पहले यह किया है। मैंने अपनी प्रक्रियाओं की निगरानी करने के लिए कोड भी लिखा था। लेकिन यह पता चला कि पाइथन & एसिन्सिओ अपने आप से काफी स्थिर हैं, मैंने कभी भी एक गंभीर त्रुटि नहीं देखी जिसने पूरे ईवेंट लूप को रोक दिया। इसलिए मैं उच्च उपलब्धता के एकमात्र उद्देश्य के लिए कई प्रक्रियाओं को बढ़ाने की अनुशंसा नहीं करता हूं।

कोड यहाँ है यदि आप रुचि रखते हैं: https://github.com/l04m33/shinpachi

आप shinpachi/__init__.py और shinpachi/processes.py की जाँच कर सकते हैं।

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