टोर्नेडो का उपयोग कब करें, ट्विस्टेड / साइक्लोन / GEvent / अन्य का उपयोग कब करें [बंद]


181

इनमें से कौन सा ढांचा / पुस्तकालय आधुनिक बहुउद्देशीय वेब अनुप्रयोग के निर्माण के लिए सबसे अच्छा विकल्प होगा? मैं एक अतुल्यकालिक वेबसर्वर रखना पसंद करूंगा जो मुझे आसानी से स्केल करने की अनुमति देगा। क्या समाधान सबसे अच्छा प्रदर्शन / स्केलेबिलिटी / सबसे उपयोगी रूपरेखा देगा (उपयोग में आसान और विकसित करने में आसान) के संदर्भ में?

यह बहुत अच्छा होगा अगर यह अच्छी कार्यक्षमता (वेबसोकेट, आरपीसी, स्ट्रीमिंग, आदि) प्रदान करेगा।

प्रत्येक समाधान के पेशेवरों और विपक्ष क्या हैं?


क्या इसे इन रूपरेखाओं में से एक होना चाहिए? यह क्या करने की आपकी योजना है और कुछ Django, Pylons, आदि की तरह काम कर सकता है ...?
जो डोहरटी

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

3
एक व्यापक प्रश्न की तरह, है ना?
जीन-पॉल काल्डेरोन

आपकी पसंद पुस्तकालयों पर निर्भर करती है, जिसका आप उपयोग करना चाहते हैं। आपके पुस्तकालय - कार्य पर, जिसे आप हल करना चाहते हैं।
निकोले फोमिनीह

1
हाँ यह व्यापक है, लेकिन ओलेव्बेबल हो सकता है। मुझे आश्चर्य है कि अगर इन पुस्तकालयों का उत्पादन और किसी में उपयोग किया जाता है, जो हर रोज उनमें से कुछ का उपयोग कर रहे हैं, तो वे बता सकते हैं कि वे किस चीज के लिए महान हैं, उनके पास क्या कमी है आदि। पुस्तकालय का चयन करने के लिए आधारभूत क्या होना चाहिए - शायद मुड़ होना चाहिए ऑटोबान या चक्रवात के बारे में बात करते समय संक्षिप्त अवहेलना? या एमेम्बे ऑटोबान और साइक्लोन उत्पादन के लिए तैयार नहीं हैं और इसका मुख्य उद्देश्य सवाल के तहत है? या हो सकता है कि टोर्नेडो में अधिक आधुनिक डिजाइन हो और यह भविष्य संभवतः चमक और महान होगा और यह स्टार्टअप परियोजना के लिए चुनना चाहिए?
वोज्शिएक डेनिलो 10

जवाबों:


226

" Django एक उच्च-स्तरीय पायथन वेब फ्रेमवर्क है जो तेजी से विकास और स्वच्छ, व्यावहारिक डिजाइन को प्रोत्साहित करता है" । यदि आप एक ई-कॉमर्स साइट के समान कुछ का निर्माण कर रहे हैं, तो आपको शायद Django के साथ जाना चाहिए। इससे आपका काम जल्दी हो जाएगा। तुम भी कई प्रौद्योगिकी विकल्पों के बारे में चिंता करने की ज़रूरत नहीं है। यह आपको टेम्पलेट इंजन से लेकर ओआरएम तक सब कुछ प्रदान करता है। जिस तरह से आप अपने ऐप को बनाते हैं, उसके बारे में यह थोड़ा राय होगी, अगर आप मुझसे पूछें तो अच्छा है। और इसके पास अन्य सभी पुस्तकालयों का सबसे मजबूत समुदाय है, जिसका मतलब है कि आसान सहायता उपलब्ध है।

" फ्लास्क विर्कज़ुग, जिंजा 2 और अच्छे इरादों के आधार पर पायथन के लिए एक माइक्रोफ़्रामवर्क है" । खबरदार - "माइक्रोफ़्रामवर्क" भ्रामक हो सकता है। इसका मतलब यह नहीं है कि फ्लास्क एक अर्ध-बेक्ड लाइब्रेरी है। इसका मतलब है कि फ्लास्क का कोर बहुत सरल है। Django के विपरीत, यह आपके लिए कोई प्रौद्योगिकी निर्णय नहीं करेगा। आप किसी भी टेम्पलेट इंजन या ORM को चुनने के लिए स्वतंत्र हैं जो आपको प्रसन्न करता है। भले ही यह डिफ़ॉल्ट रूप से जिंजा टेम्पलेट इंजन के साथ आता है, आप हमेशा अपना खुद का चयन करने के लिए स्वतंत्र हैं। जहां तक ​​मुझे पता है कि फ्लास्क एपीआई एंडपॉइंट्स (रेस्टफुल सर्विसेज) लिखने के काम आता है।

" ट्विस्टेड एक इवेंट-संचालित नेटवर्किंग इंजन है जिसे अजगर में लिखा गया है" । यह एक हाई-परफॉर्मेंस इंजन है। इसकी गति का मुख्य कारण कुछ है जिसे आस्थगित कहा जाता है। मुड़ deferreds के शीर्ष पर बनाया गया है। आप में से जो लोग defereds के बारे में नहीं जानते हैं, उनके लिए यह अतुल्यकालिक वास्तुकला के साथ तंत्र हासिल किया गया है। मुड़ बहुत तेज है। लेकिन पारंपरिक वेबपीस लिखने के लिए उपयुक्त नहीं है। यदि आप कुछ निम्न-स्तरीय नेटवर्किंग सामान करना चाहते हैं, तो ट्विस्टेड आपका मित्र है।

" टॉरनेडो एक पायथन वेब फ्रेमवर्क और अतुल्यकालिक नेटवर्किंग लाइब्रेरी है, जो मूल रूप से फ्रेंडफेड में विकसित किया गया है। गैर-अवरुद्ध नेटवर्क I / O का उपयोग करके, टॉर्नेडो हजारों खुले कनेक्शनों को दसियों तक स्केल कर सकता है, जो इसे लंबे मतदान, वेबस्पेस और अन्य अनुप्रयोगों के लिए आदर्श बनाता है। जिसे प्रत्येक उपयोगकर्ता के लिए लंबे समय तक रहने वाले कनेक्शन की आवश्यकता होती है " । टोराडो कुछ ऐसे स्थान पर है जहाँ Django और फ्लास्क के बीच है। यदि आप Django या फ्लास्क के साथ कुछ लिखना चाहते हैं, लेकिन यदि आपको बेहतर प्रदर्शन की आवश्यकता है, तो आप टोरनेडो का विकल्प चुन सकते हैं। यदि यह सही है तो यह C10k समस्या को अच्छी तरह से संभाल सकता है।

" साइक्लोन पायथन के लिए एक वेब सर्वर फ्रेमवर्क है जो टोर्नाडो एपीआई को ट्विस्टेड प्रोटोकॉल के रूप में लागू करता है" । अब, यदि आप कुछ ऐसा चाहते हैं, जो लगभग उतना ही हो, जितना कि पारंपरिक वेबपेज लिखना आसान हो, लेकिन ऐसा नहीं है? चक्रवात को नमस्ते कहो। मैं तूफान पर चक्रवात पसंद करूंगा। इसमें एक एपीआई है जो टॉरनेडो के समान है। तथ्य की बात के रूप में, यह बवंडर का एक कांटा है। लेकिन समस्या यह है कि यह अपेक्षाकृत छोटे समुदाय है। अलेक्जेंड्रे फियोरी रेपो का एकमात्र मुख्य कॉमिटर है।

" पिरामिड एक सामान्य, खुला स्रोत, पायथन वेब एप्लिकेशन डेवलपमेंट फ्रेमवर्क है। इसका प्राथमिक लक्ष्य वेब एप्लिकेशन बनाने के लिए पायथन डेवलपर के लिए इसे आसान बनाना है।" मैंने वास्तव में पिरामिड का उपयोग नहीं किया है, लेकिन मैं प्रलेखन के माध्यम से चला गया। मैं जो समझता हूं, वह पिरामिड फ्लास्क से काफी मिलता-जुलता है और मुझे लगता है कि आप पिरामिड का उपयोग कर सकते हैं, जहां फ्लास्क उपयुक्त लगता है और इसके विपरीत।

संपादित करें : किसी भी अन्य ढांचे की समीक्षा करने का अनुरोध किया जाता है!

स्रोत: http://dhilipsiva.com/2013/05/05/19/python-lbooks-django-twisted-tornado-flask-cyclone-and-pyramid.html


1
Django मेरा पसंदीदा ढांचा है। इसका प्रलेखन बहुत अच्छा है और ओआरएम आसान है। दक्षिण डेटाबेस स्कीमा माइग्रेशन के लिए बहुत अच्छा है .... लेकिन प्रश्न में यह शामिल था: "मुझे एक अतुल्यकालिक वेबसर्वर प्राप्त करना अच्छा लगेगा जो मुझे आसानी से स्केल करने की अनुमति देगा।" Django को क्लासिक रिक्वेस्ट + रिस्पॉन्स साइट्स के लिए बनाया गया था, Async के लिए नहीं।
गुत्थी

1
क्या आप पिरामिड के बारे में लिख सकते हैं?
फेजर खान

5
@FizerKhan: आपके अनुरोध के अनुसार, मैंने उत्तर को अपडेट कर दिया है। माफ़ कीजिए इतना समय लग गया। पिरामिड का उपयोग करने का समय नहीं था। लेकिन मैं प्रलेखन के माध्यम से चला गया।
धीलिप्सिवा

1
मुझे लगता है कि Tornado का उपयोग करता है कि एकल पिरोया वातावरण बहुत अधिक बग प्रवण है - एक गलती है कि एक एकल एपीआई समापन बिंदु धीमी के लिए कोड बनाता है आसानी से सभी समापन बिंदुओं के लिए समस्याओं का कारण होगा।
हाबिल मोलिना

1
क्या आप चेरी पर टिप्पणी कर सकते हैं?
स्टावरोस ए्राम्रामिडिस

60

यह स्पष्ट रूप से एक पक्षपाती उत्तर है, लेकिन यह गलत उत्तर के समान नहीं है ; आपको हमेशा ट्विस्टेड का उपयोग करना चाहिए। मैंने ऐसे ही सवालों के जवाब दिए हैं , लेकिन चूँकि आपका सवाल एक जैसा नहीं है, यहाँ कुछ कारण दिए गए हैं:

"सबसे अच्छा प्रदर्शन"

Twisted लगातार speed.twistedmatrix.com वेबसाइट पर हमारे प्रदर्शन की निगरानी करता है। हम PyPy की समान साइट द्वारा निगरानी की जाने वाली पहली परियोजनाओं में से एक थे , जिससे रनवे पर Twisted के अच्छे प्रदर्शन का आश्वासन दिया गया था कि कोई भी पायथन में उच्च-प्रदर्शन अनुप्रयोगों से संबंधित है।

"अनुमापकता"

मेरे ज्ञान के लिए, सूचीबद्ध रूपरेखाओं में से कोई भी स्वचालित स्केलिंग के लिए कोई अंतर्निहित समर्थन नहीं है; वे सभी संचार ढांचे हैं, इसलिए आपको अपने स्केलिंग नोड्स के बीच संवाद करने के लिए काम करना होगा। हालांकि, ट्विस्टेड को स्थानीय बहु-प्रसंस्करण के लिए इसके अंतर्निहित समर्थन में एक फायदा है । निष्पक्षता में, टॉर्नेडो के लिए एक तृतीय-पक्ष ऐड-ऑन है जो आपको एक ही काम करने की अनुमति देता है। हाल के रिलीज में, ट्विस्टेड ने उन विशेषताओं को जोड़ा है जो आपके द्वारा कोर के बीच काम को साझा करने के तरीकों की संख्या में वृद्धि कर सकते हैं, और उस क्षेत्र में काम जारी है। मुड़ भी अच्छी तरह से एकीकृत , "देशी" की एक जोड़ी है आरपीसी प्रोटोकॉल जो आप जिस भी स्केलिंग मुहावरे का पीछा करना चाहते हैं, उसके लिए एक निर्माण-किट प्रदान करते हैं।

"सबसे उपयोगी"

बहुत से लोग ट्विस्टेड को बहुत उपयोगी पाते हैं । इतना कि उनमें से कई ने इसे बढ़ाया और अपने एक्सटेंशन आपको उपलब्ध कराए।

"कार्यक्षमता"

बॉक्स से बाहर, मुड़ शामिल हैं:

इस अंतिम विभाग में, कम से कम, ट्विस्टेड अंतर्निहित कार्यक्षमता के लिए एक स्पष्ट विजेता लगता है। और यह सब, सिर्फ 2 मेगाबाइट पर एक पैकेज में!


6
क्यों इतने सारे लोग कहते हैं कि वे अब मुड़ का उपयोग नहीं कर रहे हैं, लेकिन GEvent?
रीमेडज़ेक्स

1
बहुत से लोग यह बता रहे हैं कि ट्विस्टेड (इसके कॉलबैक आर्किटेक्चर के कारण) का उपयोग करके बड़े अनुप्रयोगों को बनाए रखना मुश्किल है: stackoverflow.com/questions/3048012/… क्या यह बेहतर नहीं होगा कि आप जेंटवेंट या जियवेंट आधारित ट्विस्टेड का उपयोग करें?
वोज्शिएक डेनिलो

8
@remdezx आपके प्रश्न के अनुसार, दो कारण हैं। एक यह है कि लोगों को समझने में कठिन लगता है क्योंकि समवर्ती प्रोग्रामिंग को समझना मुश्किल है। वे तब GEvent पर स्विच करते हैं क्योंकि यह समझना बहुत आसान है - जब तक कोई संगामिति नहीं है, तब तक सब कुछ ठीक वैसे ही काम करता है जैसे आप अपेक्षा करते हैं। दूसरा कारण यह है कि यह GEvent पर कोड पोर्ट करने के लिए बहुत कम काम है जो कि इवेंट-संचालित I / O के प्रदर्शन लाभ प्राप्त करने के लिए इवेंट-संचालित API का उपयोग करके नहीं लिखा गया था। यदि आपका कोड बहुत अधिक स्थिति साझा नहीं करता है, तो ऐसा पोर्ट संभवतः ठीक काम करता है।
ग्लीफ

1
@ ग्लिफ़, आप कॉन्सेप्ट के बारे में बात कर रहे हैं, लेकिन ... न तो गेवन्ट और न ही ट्विस्टेड सपोर्टिबिलिटी (निश्चित रूप से आप जियोवेंट के साथ मल्टीप्रोसेसिंग का उपयोग कर सकते हैं और प्रत्येक थ्रेड पर असली थ्रेड्स और ग्रीनलेट्स के पूल का उपयोग कर सकते हैं - जो मेरे लिए ठीक काम करता है आप एक ही करने के लिए मुड़ प्लगइन का उपयोग कर सकते हैं - एक दूसरे के बगल में कई मुड़ इरादों को चलाएं)। लेकिन क्या ट्विस्टेड जिप्स आपको जियोवेंट से ज्यादा कुछ है? मुझे लगता है कि जियोवेंट / ट्विस्टेड के कई उदाहरणों के साथ भी, जिओवेंट को इसके खोज io कॉलबैक के बिना समझना आसान है। क्या मैं कुछ भूल रहा हूँ?
वोज्शिएक डेनिलो

2
@ danilo2 हाँ, आपको कम से कम एक चीज़ याद आ रही है :)। विशेष रूप से आप शब्द "संगामिति" का गलत अर्थ निकाल रहे हैं, जिसका अर्थ है "कई सीपीयू पर समवर्ती समानांतर निष्पादन"। मुड़ असिंक्रोनस (कॉलबैक-आधारित) I / O के माध्यम से समवर्ती I / O शेड्यूलिंग कर सकता है। GEvent माइक्रो-थ्रेड शेड्यूलर के माध्यम से I / O शेड्यूलिंग समवर्ती कर सकता है। मुड़, उपयोग करते हुए spawnProcess, यह I / O शेड्यूलिंग को CPU शेड्यूलिंग में भी अनुवादित किया जा सकता है।
ग्लिफ़

48

मुझे @Glyph का जवाब पसंद है। मुड़ बहुत व्यापक है, अमीर अजगर ढांचे। ट्विस्टेड और टोर्नेडो में बहुत समान डिज़ाइन है। और मुझे यह डिज़ाइन बहुत पसंद है:

  • ये तेज़ है
  • समझने में आसान
  • विस्तार करने में आसान
  • सी-एक्सटेंशन की आवश्यकता नहीं है
  • PyPy पर काम करता है।

लेकिन मैं टॉरनेडो को उजागर करना चाहता हूं , जिसे मैं पसंद करता हूं और हाल ही में लोकप्रियता हासिल करता हूं। टोर्नडो, ट्विस्टेड की तरह, कॉलबैक स्टाइल प्रोग्रामिंग का उपयोग करता है, लेकिन इसे tornado.gen.engine( twisted.internet.inlineCallbacksट्विस्टेड) का उपयोग करके इनलाइन किया जा सकता है ।

codebase

सबसे अच्छी टिप्पणी http://cyclone.io साइट से है। चक्रवात मुड़ और तूफान को मिलाने की कोशिश करता है क्योंकि:

मुड़ जनता के लिए उपलब्ध गैर-अवरुद्ध I / O के लिए सबसे परिपक्व पुस्तकालयों में से एक है। टॉरनेडो फ्रेंडफीड के वेब सर्वर का ओपन सोर्स वर्जन है, जो पायथन के लिए सबसे लोकप्रिय और तेज वेब सर्वरों में से एक है, जिसमें वेब अनुप्रयोगों के निर्माण के लिए बहुत ही अच्छा एपीआई है।

टोर्नेडो के सुरुचिपूर्ण और सीधे एपीआई को ट्विस्टेड के इवेंट-लूप पर पुल करने का विचार है, बड़ी संख्या में समर्थित प्रोटोकॉल को सक्षम करना।

लेकिन 2011 tornado.platform.twistedमें बाहर था जो समान कार्यक्षमता लाता है।

प्रदर्शन

बवंडर का प्रदर्शन बहुत बेहतर है । यह PyPy के साथ निर्बाध रूप से काम करता है, और भारी लाभ प्राप्त करता है।

अनुमापकता

ट्विस्टेड जैसा ही। टॉरनेडो में है tornado.processऔर इसके शीर्ष पर लागू की गई बहुत सारी आरपीसी सेवाएं हैं।

कार्यक्षमता

148 ट्विस्टेड और 48 गेवेंट की तुलना में 71 बवंडर आधारित पैकेज हैं। लेकिन अगर आप ध्यान से देखते हैं और पैकेज अपलोड समय के मध्यमान की गणना करते हैं, तो आप देखेंगे कि ट्विस्टेड सबसे पुराने हैं, फिर गेवेंट और टॉर्नेडो सबसे ताज़ा हैं। इसके अलावा वहाँ tornado.platform.twistedमॉड्यूल है जो आपको टोरनेडो पर ट्विस्टेड के लिए लिखे गए कोड को चलाने की अनुमति देता है ।

सारांश

टोरनेडो के साथ आप ट्विस्टेड से एक कोड का उपयोग कर सकते हैं। चक्रवात का उपयोग करने की कोई आवश्यकता नहीं है जो केवल ट्विस्ट करता है आपके कोड को (आपका कोड अधिक गन्दा हो जाता है)।

2014 के लिए, टॉर्नेडो को व्यापक रूप से स्वीकार किया गया और डिफ़ॉल्ट एसिंक्रोनस फ्रेमवर्क माना जाता है जो कि python2 और python3 दोनों पर काम करता है। इसके अलावा नवीनतम संस्करण 4.x https://docs.python.org/dev/library/asyncio.html से बहुत अधिक कार्यक्षमता लाता है ।

मैंने एक लेख लिखा है, जिसमें बताया गया है कि मैं उस बवंडर को क्यों मानता हूं - सबसे अच्छा पायथन वेब फ्रेमवर्क जहां मैंने टॉरनेडो की कार्यक्षमता के बारे में बहुत कुछ लिखा है।


15

( अद्यतन : मैं इस बात से दुखी हूं कि यहां कुछ उत्तर कैसे सुझाए गए हैं या यहां तक ​​कि गीवेंट का भी उल्लेख करते हैं- मुझे नहीं लगता कि यह इस उत्कृष्ट पुस्तकालय की लोकप्रियता, प्रदर्शन और उपयोग में आसानी के अनुपात में है!)

जीवेंट और ट्विस्ट पारस्परिक रूप से अनन्य नहीं हैं, भले ही इसके विपरीत पहली बार में स्पष्ट लग सकता है। एक परियोजना है जिसे कहा जाता है geventreactorजो किसी को दोनों दुनिया के सबसे अच्छे रूप से आसानी से लाभ उठाने की अनुमति देता है, अर्थात्:

  • गीवेंट का कुशल और सस्ता (सहकारी हरा) थ्रेड मॉडल, जो कि संगामिति में आने पर प्रोग्राम करने में बहुत आसान है — स्पष्ट रूप से, ट्विस्टेड का inlineCallbacksप्रदर्शन के संदर्भ में नौकरी तक नहीं है, जब यह कई कोरआउट्स में आता है, और न ही उपयोग की आसानी / पारदर्शिता की शर्तें: yieldऔर Deferredsहर जगह; कुछ सार बनाने के लिए अक्सर कठिन; भयावह रूप से बेकार स्टैक के निशान दोनों नंगे के साथ-साथ Deferredऔर भी बहुत कुछ के साथ हैं @inlineCallbacks
  • ट्विस्टेड की सभी अंतर्निहित कार्यक्षमता आप कभी भी सपना देख सकते हैं, जिसमें शामिल हैं लेकिन सीमित नहीं हैं IReactorProcess.spawnProcess

मैं व्यक्तिगत रूप से वर्तमान में मुड़ 12.3 के साथ Gevent 1.0rc2 का उपयोग कर रहा हूं geventreactor। मैंने अपनी स्वयं की अभी तक अप्रकाशित परिवर्धन और संवर्द्धन को लागू किया है, geventreactorजिसे मैं जल्द ही प्रकाशित करूंगा, उम्मीद है कि geventreactorमूल GitHub रिपॉजिटरी: https://github.com/jyio/geventreactor के हिस्से के रूप में ।

मेरे वर्तमान लेआउट इस तरह के एक गैर-अवरुद्ध के रूप में Gevent का अच्छा प्रोग्रामिंग मॉडल, और लाभ उठाने बातों में कार्यक्रम के लिए मुझे अनुमति देता है socket, urllib2और अन्य मॉड्यूल। मैं नियमित चीजों को करने के लिए नियमित रूप से पायथन कोड का उपयोग कर सकता हूं, जैसा कि सीखने की अवस्था के विपरीत है और यहां तक ​​कि सरल, बुनियादी चीजों को मोड़ने की असुविधा। मैं आसानी से अधिकांश 3 पार्टी पुस्तकालयों का उपयोग कर सकता हूं जो सामान्य रूप से या तो ट्विस्टेड के साथ प्रश्न से बाहर हैं, या थ्रेड्स के उपयोग की आवश्यकता है।

मैं ग्रीनलेट्स ( Deferredएस और कॉलबैक के बजाय , और / या @inlineCallbacks) का उपयोग करके अजीब और अक्सर जटिल कॉलबैक आधारित प्रोग्रामिंग से पूरी तरह से बच सकता हूं ।

(यह उत्तर मेरे निजी अनुभवों पर आधारित था, जिसमें ट्विस्टेड और गेवेंट दोनों का उपयोग वास्तविक जीवन की परियोजनाओं में किया गया था, ट्विस्टेड का उपयोग करके अधिक अनुभव के साथ (लेकिन मैं ट्विस्टेड विशेषज्ञ होने का दावा नहीं करता हूं)। मुझे जिस सॉफ्टवेयर को लिखना पड़ा है। टी को ट्विस्टेड सुविधाओं में से कई का उपयोग करना था, इसलिए उन विशेषताओं के सेट के आधार पर जिन्हें आपको ट्विस्टेड की आवश्यकता होती है, (अपेक्षाकृत दर्द रहित) गीवेंट और ट्विस्टेड मिश्रण की अतिरिक्त जटिलता परेशानी के लायक नहीं हो सकती है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.