क्या मुझे संगामिति से निपटने के लिए अजगर के साथ रहना या छोड़ देना चाहिए?


31

मेरे पास एक 10K LOC प्रोजेक्ट है, जिसमें असंगति और बैकग्राउंड जॉब के लिए सेलेरी ( रैबिटमक्यू ) की काफी डील के साथ Django में लिखा गया है , और इस नतीजे पर पहुंचे हैं कि सिस्टम के कुछ हिस्सों को बेहतर कंफर्ट के लिए Django की तुलना में किसी चीज़ में दोबारा लिखे जाने से फायदा होगा। । कारणों में शामिल हैं:

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

Erlang या Clojure जैसी भाषा के लिए जाने की तुलना में Twisted या Tornado जैसी किसी चीज़ का उपयोग करने के नियम और विपक्ष क्या हैं ? मुझे व्यावहारिक लाभ और निरोधकों में दिलचस्पी है।

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

उदाहरण 1: एक HTTP अनुरोध के बाहर काम पर Django:

  1. एक NFC टैग पढ़ा जाता है।
  2. डेटाबेस (और संभवतः LDAP) को क्वेर किया जाता है, और जब डेटा उपलब्ध हो जाता है, तो हम कुछ करना चाहते हैं (लाल या हरी बत्ती, ध्वनि बजाएं)। यह Django ORM का उपयोग करते हुए ब्लॉक करता है, लेकिन जब तक वहाँ अजवाइन कार्यकर्ता उपलब्ध हैं तब तक कोई फर्क नहीं पड़ता। अधिक स्टेशनों के साथ समस्या हो सकती है।

उदाहरण 2: Django संकेतों का उपयोग करके "संदेश-पास करना":

  1. एक post_deleteघटना को नियंत्रित किया जाता है, अन्य वस्तुओं को इस वजह से बदल दिया या हटाया जा सकता है।
  2. अंत में, उपयोगकर्ताओं को सूचनाएं भेजी जानी चाहिए। यहां, यह अच्छा होगा यदि अधिसूचना हैंडलर को दी गई दलीलें हटाई गई या हटाई जाने वाली वस्तुओं की प्रतियां थीं और हैंडलर में नहीं बदलने की गारंटी दी गई थी। (यह ओआरएम द्वारा प्रबंधित ऑब्जेक्ट्स को हैंडलर के पास नहीं, बस मैन्युअल रूप से किया जा सकता है।)

मुझे लगता है कि यदि आप निष्कर्ष पर आए हैं तो आप इसके बारे में अधिक बताएंगे कि बेहतर उत्तर होगा
विंस्टन ईवर्ट

5
इससे पहले कि कोई भी यह कहे कि भाषा विकल्प प्रश्न ऑफ टॉपिक हैं, मैं यह कहने में झंकार करूंगा कि मुझे लगता है कि यह ठीक है क्योंकि यह विशिष्ट आवश्यकताओं के साथ एक व्यावहारिक समस्या है। मुझे उम्मीद है कि यह कुछ विस्तृत तुलनाएं खींचता है।
एडम लीयर

मुड़ विपरीत है समवर्ती है! यह एक एकल थ्रेडेड सर्वर है जो ईवेंट चालित है, यह आपको कहीं भी नहीं मिलेगा यदि आपको सही कंसीडर की आवश्यकता है।

जवाबों:


35

खुलने वाले विचार

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

एकल-धागा अतुल्यकालिक

कई प्रश्न और अन्य वेब संसाधन हैं जो पहले से ही एकल-धागा अतुल्यकालिक बनाम बहु-सूत्रीय समरूपता के अंतर, पेशेवरों और विपक्षों से निपटते हैं। जब I / O प्रमुख अड़चन है, तो Node.js का सिंगल-थ्रेड एसिंक्रोनस मॉडल कैसे प्रदर्शन करता है, इसके बारे में पढ़ना दिलचस्प है और एक ही बार में कई अनुरोध किए जा रहे हैं।

मुड़, बवंडर और अन्य अतुल्यकालिक मॉडल एकल-धागे का उत्कृष्ट उपयोग करते हैं। चूंकि बहुत सारे वेब प्रोग्रामिंग में बहुत सारे I / O (नेटवर्क, डेटाबेस, आदि) हैं, इसलिए दूरस्थ कॉल पर प्रतीक्षा करने में लगने वाला समय काफी बढ़ जाता है। वह समय जो अन्य चीजों को करने में खर्च किया जा सकता है - जैसे अन्य डेटाबेस कॉल को बंद करना, पृष्ठों को रेंडर करना और डेटा उत्पन्न करना। उस एकल-सूत्र का उपयोग बहुत अधिक है।

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


उदाहरण

एक वेब सर्वर के मामले में, प्रत्येक अनुरोध का ढोंग अपने स्वयं के धागे से किया जाता है। कहें कि प्रत्येक थ्रेड के लिए 1MB मेमोरी आवश्यक है, और वेब सर्वर में 2GB RAM है। यह वेब सर्वर किसी भी समय किसी भी बिंदु पर प्रसंस्करण (लगभग) 2000 अनुरोधों को सक्षम करने में सक्षम होगा, इससे पहले कि किसी भी अधिक प्रक्रिया के लिए पर्याप्त मेमोरी न हो।

यदि आपका लोड इससे काफी अधिक है, तो अनुरोधों को बहुत लंबा समय लगने वाला है (जब पुराने अनुरोधों के पूरा होने की प्रतीक्षा है), या आप समवर्ती अनुरोधों की संख्या का विस्तार करने के लिए क्लस्टर में अधिक सर्वर फेंकने जा रहे हैं। ।


मल्टी-थ्रेड कॉनकरी

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

बहु-धागा कोड के बारे में तर्क करना भी बहुत कठिन है। लॉकिंग, सिंक्रोनाइज़ेशन, और अन्य मज़ेदार संगामिति समस्याओं के साथ समस्याएँ हैं। एकल-धागा अतुल्यकालिक समान समस्याओं से ग्रस्त नहीं है।

मल्टी-थ्रेड कोड सीपीयू इंटेंसिव के लिए बहुत अधिक परफॉर्मेंट है हालांकि कार्यों के । यदि एक थ्रेड के लिए "यील्ड" के लिए कोई अवसर मौजूद नहीं है, तो एक नेटवर्क कॉल के रूप में, जो सामान्य रूप से एक सिंगल-थ्रेड मॉडल को ब्लॉक करेगा - जो कि किसी भी संगामिति के लिए नहीं होगा।

दोनों मई कोएक्सिस्ट

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


तल - रेखा

विचार करने के लिए कई अन्य मुद्दे हैं, लेकिन मुझे इस तरह से दो के बारे में सोचना पसंद है:

  • यदि आपका कार्यक्रम I / O बाध्य है , तो एकल-धागा अतुल्यकालिक संभवतः काफी अच्छा काम करने वाला है।
  • यदि आपका प्रोग्राम सीपीयू बाउंड है , तो बहु-थ्रेड सिस्टम शायद सबसे अच्छा होगा।

आपके विशेष मामले में, आपको यह निर्धारित करने की आवश्यकता है कि किस प्रकार का अतुल्यकालिक काम पूरा हो रहा है, और कितनी बार उन कार्यों का उदय होता है।

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

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

अन्य बातें

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

इन दो प्रणालियों के बीच संचार से जुड़ी कठिनाइयों के बारे में कैसे? क्या यह समानांतर रूप से दो अलग-अलग प्रणालियों को बनाए रखने में जटिल होगा? एर्लांग प्रणाली को Django से कार्य कैसे प्राप्त होंगे? Erlang उन परिणामों को Django पर वापस कैसे संचारित करेगा? क्या प्रदर्शन महत्वपूर्ण एक समस्या है जो अतिरिक्त जटिलता इसके लायक है?


अंतिम विचार

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

बेशक, हमेशा समस्या पर अधिक हार्डवेयर फेंकने का सुझाव है। क्या एक नए सर्वर के प्रावधान की लागत विकास और रखरखाव की तुलना में पूरी तरह से नए उपतंत्र से सस्ती है?

मैंने इस बिंदु पर बहुत सारे सवाल पूछे हैं, लेकिन यह मेरा इरादा था। विश्लेषण और आगे के विवरण के बिना उत्तर आसान नहीं होगा। समस्याओं का विश्लेषण करने में सक्षम होने के कारण प्रश्नों को जानने के लिए नीचे आता है, हालांकि ... उम्मीद है कि मैंने उस मोर्चे पर मदद की है।

मेरी आंत की भावना कहती है कि किसी अन्य भाषा में फिर से लिखना अनावश्यक है। जटिलता और लागत शायद बहुत शानदार होगी।


संपादित करें

अनुवर्ती कार्रवाई करने के लिए प्रतिक्रिया

आपका अनुवर्ती कुछ बहुत ही रोचक उपयोग के मामले प्रस्तुत करता है।


1. HTTP अनुरोध के बाहर काम कर रहे Django

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

इस मामले के लिए, मुझे दो रास्ते दिखाई दे रहे हैं जिनकी आप जाँच कर सकते हैं:

  1. सुनिश्चित करें कि आपका डेटाबेस कनेक्शन पूलिंग के साथ एक साथ कई प्रश्नों को संभालने में सक्षम है। (उदाहरण के लिए, Oracle के लिए आवश्यक है कि आप तदनुसार Django कॉन्फ़िगर करें 'OPTIONS': {'threaded':True}।) डेटाबेस स्तर या Django स्तर पर समान कॉन्फ़िगरेशन विकल्प हो सकते हैं जिन्हें आप अपने डेटाबेस के लिए ट्वीक कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि आप अपने डेटाबेस के प्रश्नों को किस भाषा में लिखते हैं, आपको एल ई डी को लाइट करने से पहले इस डेटा के वापस आने का इंतजार करना होगा। क्वेरी कोड के प्रदर्शन से फर्क पड़ सकता है , और Django ORM तेजी से बिजली नहीं मार रहा है ( लेकिन , आमतौर पर पर्याप्त तेजी से)।
  2. सेटअप / आंसू समय कम करें। लगातार चलने वाली प्रक्रिया है, और इसे संदेश भेजें। (सही होने पर मुझे सही करें, लेकिन यह वही है जो आपका मूल प्रश्न वास्तव में है।) क्या यह प्रक्रिया पायथन / Django या किसी अन्य भाषा / रूपरेखा में लिखी गई है या नहीं। मुझे इतनी बार प्रबंधन आदेशों का उपयोग करने का विचार पसंद नहीं आया। क्या यह संभव है कि कोड का एक छोटा सा टुकड़ा लगातार चल रहा हो, जो एनएफसी पाठकों के संदेशों को संदेश कतार पर धकेलता है, जिसे सेलेरी फिर पढ़ता है और आगे से Django? एक छोटे से कार्यक्रम की स्थापना और फाड़, भले ही यह पायथन में लिखा गया हो (लेकिन Django!), Django कार्यक्रम को शुरू करने और रोकने के लिए बेहतर नहीं होना चाहिए (इसके सभी उपतंत्रों के साथ)।

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


2. "मैसेज-पासिंग" Django सिग्नल के साथ

आपका दूसरा उपयोग मामला भी काफी दिलचस्प है; मुझे यकीन नहीं है कि अगर मेरे पास इसके लिए उत्तर हैं। यदि आप मॉडल इंस्टेंसेस को हटा रहे हैं, और बाद में उन पर काम करना चाहते हैं, JSON.dumpsतो उन्हें क्रमबद्ध करना और फिर डीरियलाइज़ करना संभव हो सकता है JSON.loads। डेटाबेस से संबंधित फ़ील्ड को लोड किए जाने के बाद से ऑब्जेक्ट से संबंधित ऑब्जेक्ट (बाद में संबंधित मॉडल) को पूरी तरह से फिर से बनाना असंभव होगा, और यह लिंक अब मौजूद नहीं होगा।

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


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

@Jarrod, मैं व्यक्तिगत रूप से एर्लैंग को नहीं जानता हूं, इसलिए मैं उस संबंध में आप जो कहूंगा उसे स्वीकार करूंगा। अन्यथा, लगभग सब कुछ मैंने उल्लेख किया प्रासंगिक है। लागत, जटिलता और वर्तमान उपकरणों का सही उपयोग किया जा रहा है या नहीं।
जोश स्मेटन


यह वास्तव में ^ ^ पढ़ने के लिए मुझे बहुत अच्छा लगता है। +1, अच्छा काम!
लॉरेंट बॉरगुल्ल-रॉय

इसके अलावा अगर आपके पास Django टेम्पलेट्स वे Erlydtl साथ erlang में इस्तेमाल किया जा सकता
जाकारी कश्मीर

8

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

मैंने इसके बारे में एक ब्लॉग पोस्ट लिखी, पायथन / ट्विस्टेड वीएस एर्लांग / ओटीपी

TLDR; एर्लांग ने जीत हासिल की।


4

मुड़ के साथ व्यावहारिक समस्याएं (जो मुझे पसंद हैं और लगभग पांच साल तक इस्तेमाल किया है):

  1. प्रलेखन कुछ वांछित होने के लिए छोड़ देता है, और मॉडल वैसे भी सीखने के लिए काफी जटिल है। मुझे अन्य पायथन प्रोग्रामर को ट्विस्टेड कोड पर काम करना कठिन लगता है।
  2. मैंने अच्छी अवरोधक एपीआई की कमी के लिए ब्लॉकिंग फ़ाइल I / O और डेटाबेस एक्सेस का उपयोग किया। यह वास्तव में प्रदर्शन को चोट पहुंचा सकता है।
  3. लगता है कि ट्विस्टेड का उपयोग करने वाला एक विशाल समुदाय और स्वस्थ समुदाय नहीं है; उदाहरण के लिए, Node.js के पास विशेष रूप से वेब बैक-एंड प्रोग्रामिंग के लिए बहुत अधिक सक्रिय विकास है।
  4. यह अभी भी पायथन है, और कम से कम CPython सबसे तेज़ चीज़ नहीं है।

मैंने कॉफी के साथ Node.js का उपयोग करके थोड़ा काम किया है और यदि समवर्ती प्रदर्शन आपकी चिंता है तो यह छलांग के लायक हो सकता है।

क्या आपने उदाहरणों के बीच ग्राहकों को फैलाने के लिए कुछ व्यवस्था के साथ Django के कई उदाहरणों को चलाने पर विचार किया है ?


1
सामान्य रूप से पायथन प्रलेखन कुछ वांछित होने के लिए छोड़ देता है: (/ यह नहीं कह रहा है कि यह बुरा है, लेकिन एक ऐसी भाषा के लिए जो लोकप्रिय है इससे बहुत बेहतर होने की उम्मीद होगी)।
रूक

3
मुझे लगता है कि पायथन प्रलेखन और विशेष रूप से Django प्रलेखन किसी भी भाषा के हाथों के लिए सबसे अच्छे डॉक्स में से कुछ होने के लिए। कई तीसरे पक्ष के पुस्तकालय हालांकि वांछित होने के लिए कुछ छोड़ देते हैं।
जोश स्मेटन

1

किसी अन्य भाषा पर स्विच करने से पहले मैं आपको निम्नलिखित सुझाव दूंगा।

  1. पृष्ठ दोष, संदर्भ स्विच, और सिस्टम कॉल प्रतीक्षा जैसी सिस्टम ईवेंट रिकॉर्डिंग के लिए LTTng का उपयोग करें।
  2. कनवर्ट करें जहां भी C लाइब्रेरी का उपयोग करने में बहुत अधिक समय लग रहा है, और आपको कोई भी डिज़ाइन पैटर्न पसंद है (जैसे मल्टी-थ्रेडिंग, सिग्नल इवेंट आधारित, कॉल वापस async, या Unix पारंपरिक select) का उपयोग करें जो वहां I / O के लिए अच्छा है।

एक बार आवेदन के प्रदर्शन में प्राथमिकता होने पर मैं पायथन में थ्रेडिंग का उपयोग नहीं करूंगा। मैं उपरोक्त विकल्प ले सकता हूं, जो कई समस्याओं को हल कर सकता है जैसे कि सॉफ्टवेयर का पुन: उपयोग, Django के साथ कनेक्टिविटी , प्रदर्शन, विकास में आसानी आदि।

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