2012-10-10 46 views
11

के बीच मतभेद मैं समझता हूं कि tornado और gevent दोनों अतुल्यकालिक पायथन ढांचे हैं।गीवेंट और टर्ननाडो

bottle documentation पढ़ने के दौरान मैंने पाया कि भूगर्भ वास्तव में असीमित नहीं है, और आप हजारों छद्म-थ्रेड बना सकते हैं जो सिंक्रनाइज़ रूप से काम करते हैं।

सीवेली, भूगर्भ में, आप जल्दी से अनुरोध हैंडलर को समाप्त नहीं कर सकते हैं और आपको पूर्ण प्रतिक्रिया वापस करने की आवश्यकता है, जबकि आप टर्ननाडो में कर सकते हैं। (अगर मैं यहां गलत हूं तो मुझे सही करें)

क्या कोई विस्तार से वर्णन कर सकता है कि ये सिस्टम आंतरिक रूप से कैसे काम करते हैं, और किस तरह से वे अलग-अलग होते हैं। साथ ही, डब्ल्यूएसजीआई इन प्रणालियों की असीमित प्रकृति के साथ कैसे खेलता है? क्या ये ढांचे डब्लूएसजीआई के अनुरूप हैं, यदि हां, तो कैसे?

http://en.wikipedia.org/wiki/Coroutines

और:

http://en.wikipedia.org/wiki/Event-driven_architecture

http://en.wikipedia.org/wiki/Event-driven_programming

gevent पैकेज coroutines उपयोग करता है और तूफान कार्यक्रम चालित है

+0

मुझे लगता है कि मोटर http://emptysquare.net/motor/ एक समाधान है जिसने उनके बीच एक पुल बनाया है: पी –

उत्तर

24

के एक पढ़ा है।

यहां तक ​​कि संचालित सिस्टम डब्लूएसजीआई को आसानी से मानचित्र नहीं बनाते हैं, लेकिन एक कोरआउट प्रणाली, क्योंकि यह धागे की तरह दिखता है, अगर डब्लूएसजीआई का समर्थन करने के लिए बनाया जा सकता है तो चीजों को अवरुद्ध करने के लिए पॉइंट को कोरआउटिन स्विच करने के लिए पैच किया जा सकता है।

+1

धन्यवाद! बहुत नशे की लत स्पष्टीकरण! – emanuelcds

19

गीवेंट और टोरनाडो थोड़ा अलग हैं। gevent ट्विस्ट की तरह अधिक है - एक एसिंक्रोनस नेटवर्क ढांचे, जबकि टोरनाडो एक वेब केवल ढांचा है।

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

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

टोरनाडो एक एसिंक्रोनस वेब फ्रेमवर्क है जो प्रोग्रामर पर पाइथन में एसिंक्रोनस कोड लिखने पर निर्भर करता है, जो अक्सर Backend में दर्द होता है क्योंकि जावास्क्रिप्ट या जावा जैसी कोई बहुमुखी अज्ञात बंद या कक्षाएं नहीं होती हैं। इसलिए, टोरनाडो का उपयोग करके अच्छा कोड लिखना वास्तव में कठिन है। उदाहरण के लिए, अवरुद्ध पुस्तकालयों का उपयोग करना दर्द बन जाता है।

वास्तव में दोनों ढांचे उनके मूल पर असीमित हैं, लेकिन परिणामस्वरूप कोड थोड़ा अलग दिखता है (gevent के साथ प्रोग्राम करने में आसान)।

आप वास्तव में टोरंडो और गीवेंट का एक साथ उपयोग कर सकते हैं, लेकिन मैंने इसे अभी तक नहीं देखा है (अभी तक)।

+0

+1 लेकिन आप यह कहना भूल गए कि टॉरनाडो में एक wsgi कंटेनर है और यह एक वेब सर्वर बन गया है। – BlaShadow

+1

मुझे नहीं पता कि टोरनाडो के साथ एसिंक कोड लिखना मुश्किल है या नहीं।यदि कुछ भी हो, तो 'उपज' कीवर्ड - जिसमें जावास्क्रिप्ट अब के लिए कमी है - कोड को बहुत साफ और अनुसरण करने में आसान बनाता है। कोई कॉलबैक पास नहीं है। इसके अलावा, टोरनाडो के साथ केंद्रीकृत अपवाद हैंडलिंग, नोडजेएस के मुकाबले क्लीनर है, जहां आपको पता होना है कि आप क्या कर रहे हैं, या फिर आपको मेमोरी रिसाव मिलती है। –

+2

"बैकएंड में दर्द" - इसे प्यार करो! – FullStack