2012-03-19 12 views
18

मुझे एक डेमॉन प्रोग्राम लिखना है जो लगातार पृष्ठभूमि में चलता है और कुछ सरल कार्य करता है। तर्क बिल्कुल जटिल नहीं है, हालांकि इसे विस्तारित अवधि के लिए चलाना है और स्थिर होना है।पायथन में एक डेमॉन लिखना अच्छा विचार है?

मुझे लगता है कि इस तरह के आवेदन लिखने के लिए सी ++ एक अच्छा विकल्प होगा, हालांकि मैं पाइथन पर भी विचार कर रहा हूं क्योंकि इसमें लिखना आसान है और इसमें कुछ तेज़ी से परीक्षण करना आसान है।

मेरे पास पाइथन के साथ समस्या यह है कि मुझे यकीन नहीं है कि इसका रनटाइम पर्यावरण समय के साथ कैसे व्यवहार करेगा। क्या कुछ जीसी क्विर्क की वजह से यह अधिक से अधिक स्मृति खा सकता है? क्या यह अप्रत्याशित रूप से दुर्घटनाग्रस्त हो सकता है? मैंने पहले कभी पाइथन में डिमन्स नहीं लिखे हैं, इसलिए यदि कोई यहां किया गया है, तो कृपया अपना अनुभव साझा करें। धन्यवाद!

+4

यह आसान साबित हो सकता है: http://pypi.python.org/pypi/python-daemon/ (इसका कभी भी उपयोग नहीं किया गया)। –

उत्तर

14

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

और यदि आप सोच रहे हैं, तो वे शून्य समस्याओं के साथ नियमित रीबूट के बीच महीनों और महीनों के लिए दौड़ते हैं (आमतौर पर 6 महीने कहते हैं)।

+0

इन डेमॉन के लिए आपने किस पुस्तकालय का उपयोग किया था? अजगर-डेमॉन? daemonize? – Zaroth

+0

@ ज़ारोथ कोई लाइब्रेरी नहीं, केवल एक मानक डबल-कांटा। –

4

हां यह रिसाव कर सकता है। हां यह अप्रत्याशित रूप से दुर्घटनाग्रस्त हो सकता है। कुछ भी कर सकते हैं।

मैं कहूंगा कि आप पाइथन जैसे कुछ के साथ मैन्युअल मेमोरी मैनेजमेंट (उदा। सी ++) के साथ गलती से पर्यावरण में लीक होने की संभावना अधिक हैं।

अप्रत्याशित रूप से दुर्घटनाग्रस्त होने के लिए, संभावना है कि पाइथन का मनमाना ढेर जावा के मनमाने ढंग से ढेर से अप्रत्याशित रूप से क्रैश होने की अधिक संभावना हो सकती है, क्योंकि static typing से बाद के लाभ जहां आप संकलन समय पर त्रुटियों का पूरा भार पकड़ सकते हैं , कि पाइथन duck typing और लचीलापन के अन्य रूपों के साथ।

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

+1

ट्विस्ट वास्तव में नेटवर्क ढांचे का अधिक है, ओपी ने कभी नहीं कहा कि यह एक नेटवर्किंग डिमन था। –

+3

पायथन दृढ़ता से टाइप किया गया है और बतख – wim

+1

@ क्रिस: उचित बिंदु, हालांकि जब मैं ट्विस्ट के बारे में सोचता हूं तो मुझे नेटवर्किंग करने की तुलना में "घटना-आधारित" से अधिक लगता है, जो मुझे लगता है कि किसी भी प्रकार के डिमन –

1

मैंने सी/सी ++ और पर्ल में कई चीजें लिखी हैं जो एक LINUX बॉक्स ओएस के दौरान शुरू की जाती हैं बूट, आरसीडीडी का उपयोग कर उन्हें लॉन्च करना।

इसके अलावा मैंने कुछ जावा और पायथन स्क्रिप्ट लिखी हैं जिन्हें मैंने ऊपर वर्णित किया है, लेकिन मुझे उन्हें लॉन्च करने के लिए एक छोटी शेल-स्क्रिप्ट (.sh फ़ाइल) की आवश्यकता है और मैंने आरसी 5 का उपयोग किया ।

मुझे आपको बताना है कि उनके रनटाइम वातावरण के बारे में आपकी चिंताओं पूरी तरह से मान्य हैं, आपको अपने द्वारा उपयोग किए जाने वाले रनलेवल के बारे में सावधान रहना होगा ... (केवल आरसी 2 से आरसी 5 तक, क्योंकि आरसी .1 और आरसी 6 सिस्टम के लिए हैं)।

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

मुझे लगता है कि आपका सबसे अच्छा शॉट आपकी स्क्रिप्ट को अजगर में बनाना है और इसे आरसी.5 से .sh फ़ाइल का उपयोग करके लॉन्च करना है।

शुभकामनाएं!

+0

आरसी.एक्स स्तर वास्तव में क्या हैं? – Finglas

+1

यह उपयोगी हो सकता है: http://www.networkclue.com/os/Linux/run-levels.aspx –

+0

@ फ़िंगलास आप इसे http://unix.stackexchange.com पर पूछ सकते हैं –