मैंने हाल ही में वेब विकास के लिए पायथन का उपयोग करने के साथ प्रयोग करना शुरू कर दिया है। अब तक मुझे अपाचे का उपयोग mod_wsgi और पायथन 2.7 के लिए Django वेब ढांचे के साथ कुछ सफलता मिली है। हालांकि मैंने कुछ मुद्दों में भाग लिया है जिसमें प्रक्रियाएं लगातार चल रही हैं, सूचनाएं अपडेट कर रही हैं।मैं लंबी अवधि (अनंत) पायथन प्रक्रिया कैसे चला सकता हूं?
मैंने एक स्क्रिप्ट लिखी है जिसे मैं "daemonManager.py" कहता हूं जो सभी या व्यक्तिगत पायथन अपडेट लूप को शुरू और बंद कर सकता है (क्या मुझे उन्हें डेमन्स कहा जाना चाहिए?)। यह फोर्किंग द्वारा करता है, फिर मॉड्यूल को विशिष्ट कार्यों के लिए लोड करना चाहिए जो इसे चलाना चाहिए और एक अनंत लूप शुरू करना चाहिए। यह प्रक्रिया का ट्रैक रखने के लिए /var/run
में एक पीआईडी फ़ाइल सहेजता है। अब तक सब ठीक है। जिन समस्याओं का सामना मैंने किया है वे हैं:
अब और फिर प्रक्रियाओं में से एक अभी निकल जाएगी। मैं सुबह
ps
की जांच करता हूं और प्रक्रिया अभी खत्म हो गई है। कोई त्रुटि लॉग नहीं हुई थी (मैंlogging
मॉड्यूल का उपयोग कर रहा हूं), और मैं उन सभी अपवादों को कवर कर रहा हूं जिन्हें मैं सोच सकता हूं और उन्हें लॉगिंग कर सकता हूं। साथ ही मुझे नहीं लगता कि इन छोड़ने की प्रक्रियाओं में मेरे कोड के साथ कुछ भी करना है, क्योंकि मेरी सभी प्रक्रियाएं पूरी तरह से अलग कोड चलाती हैं और बहुत ही समान अंतराल पर बाहर निकलती हैं। हो सकता है मै गलत हूँ। क्या पाइथन प्रक्रियाओं के लिए दिन/सप्ताह के लिए दौड़ने के बाद यह मरना सामान्य है? मुझे इस समस्या से कैसे निपटना चाहिए? क्या मुझे एक और डिमन लिखना चाहिए जो समय-समय पर जांच करता है कि अन्य डिमन्स अभी भी चल रहे हैं या नहीं? क्या होगा यदि वह डिमन बंद हो जाए? मैं इसे संभालने के तरीके पर एक नुकसान में हूँ।मैं प्रोग्राम प्रोग्रामिक रूप से कैसे जान सकता हूं कि कोई प्रक्रिया अभी भी चल रही है या नहीं? मैं
/var/run
में पीआईडी फाइलों को सहेज रहा हूं और जांच रहा हूं कि पीआईडी फाइल यह निर्धारित करने के लिए है कि प्रक्रिया चल रही है या नहीं। लेकिन अगर प्रक्रिया अप्रत्याशित कारणों से मर जाती है, तो पीआईडी फाइल बनी रहेगी। इसलिए जब भी एक प्रक्रिया दुर्घटनाग्रस्त हो जाती है (प्रति सप्ताह दो बार), तो इस तरह के उद्देश्य को हराने के लिए इन फ़ाइलों को हटाना होगा। मुझे लगता है कि मैं जांच सकता हूं कि फाइल में पीआईडी पर कोई प्रक्रिया चल रही है, लेकिन क्या होगा यदि कोई और प्रक्रिया शुरू हो गई है और मृत प्रक्रिया के पीआईडी को सौंपा गया है? मेरा डिमन सोचता है कि यह प्रक्रिया ठीक चल रही है भले ही यह लंबे समय तक मर जाए। फिर मैं इस बात से निपटने के लिए एक नुकसान में हूं।
सबसे अच्छा रन अनंत अजगर प्रक्रियाओं के लिए, उम्मीद है कि यह भी उपर्युक्त समस्याओं पर कुछ प्रकाश बहा, मैं
मैं अपाचे 2.2.14 उपयोग कर रहा हूँ पर स्वीकार करने पर कोई उपयोगी जवाब एक उबंटू मशीन।
मेरा पायथन संस्करण 2.7.2
यदि आप क्रैश होने वाले डेमन्स के लिए कोड दिखाते हुए कुछ कोड नमूने जोड़ते हैं, तो हम विशिष्टताओं को संबोधित करने में सक्षम हो सकते हैं। सबसे पहले बात यह है कि, मैं आपकी स्क्रिप्ट से सभी कोड हटा दूंगा जो फोर्किंग, मॉनिटरिंग, रीडायरेक्शन इत्यादि से निपटते हैं। –
क्या आप यह स्पष्ट कर सकते हैं कि क्या आप इन डीमन प्रक्रियाओं को डब्ल्यूएसजीआई एप्लिकेशन से mod_wsgi या अलग से चल रहे हैं। आपको mod_wsgi के तहत चल रहे किसी एप्लिकेशन से ऐसी प्रक्रिया निर्माण नहीं करनी चाहिए। –
बहुत सारे प्रचार की तरह लगता है कि यहां जा रहा है। मेरा मतलब है, यह एक अच्छी तरह से सवाल है, जिस पर एक विशिष्ट तकनीक को एक उत्तर दिया जाता है, जिसके लिए एक और उत्तर दिया जाता है जिसमें इसे फिर से उत्तर दिया जाता है "मैं अभी भी एक और (प्रतिस्पर्धी?) तकनीक का उपयोग कर समाप्त हुआ ... – citn