पायथन आत्म निगरानी वर्ग

मैं एक वर्ग बनाने की कोशिश कर रहा हूं जो कर सकता है 1. खुद को जीवित रखें 2. समय-समय पर निगरानी करें और खुद को सही करने के लिए सामान करें (यानी डेटा आने से रोकता है, स्वयं को राहत देता है)

मैं वर्तमान में ऐसा कर रहा हूं:

class SelfMonitorClass(object):
    exit_flag = False

    def __init__(self):
        self.flush_timer = 10 # in seconds, how often we should check ourselves!
        self.perpetual_runner()

    def do_actions(self):
        # do stuff! add things together
        # check that temperature ect is in some range 
        print('I AM DOING AN ACTION!')

    def perpetual_runner(self):
        self.do_actions() # actually go do something!!
        if self.exit_flag == False: # POISON PILL check
            athread = threading.Timer(self.flush_timer,  self.perpetual_runner);
            athread.daemon = True
            athread.start()
    def kill(self)
        self.exit_flag = True

if __name__ == '__main__':
    aclass = SelfMonitorClass()

    print('Main thread exits!')

>>>> 'I AM DOING SOMETHING' 
>>>> 'Main thread exits!'
>>>> 'I AM DOING SOMETHING' # repeat every 10 seconds, while console is still up.  Regardless of the fact '__main__' is done.

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

इसके अलावा यदि ऐसे पैकेज भी हैं जो मेरे लिए ऐसा कुछ ख्याल रख सकते हैं तो वे बहुत ही अच्छे होंगे!

इस कार्यक्रम को मारना बल्कि कष्टप्रद है (प्रक्रियाएं खोजें, सिगरेट/सिगकिल। इस तरह की चीजें), लेकिन यह यहां प्रमुख चिंता नहीं है। केवल धागे को जीवित रखते हुए और समय-समय पर आंतरिक राज्यों की जांच करना और कुछ करना है।

2
नहीं। समस्या निवारण समस्या मनमाने ढंग से प्रोग्राम का एन्कोडिंग प्राप्त करने और किसी दिए गए इनपुट के साथ चलने पर घोषित होने या नहीं घोषित करने के बारे में है। यह पोस्ट सबसे पहले चाहे एक प्रोग्राम किसी दिए गए इनपुट पर रुक जाएगा, और दूसरा एक विशेष "प्रोग्राम" (जो भी do_actions में है) पर केंद्रित है। ।
जोड़ा लेखक ely, स्रोत
@PastBT, क्या आपका मतलब है अगर self.do_actions() में, मैं वहां थोड़ी देर लूप लूप रखता हूं? उस स्थिति में मेरा कार्यक्रम कभी खत्म नहीं होगा - प्रोग्रामिंग में एक बग और इरादा व्यवहार नहीं।
जोड़ा लेखक user1639926, स्रोत
@roippi निश्चित रूप से। यह मेरे लिए एक बड़ी चिंता नहीं है। यह थ्रेड को जिंदा रखता है और समय-समय पर राज्य का प्रबंधन करता है
जोड़ा लेखक user1639926, स्रोत
@yaccz, daemontools बस मुझे फ़ाइल चलाने में मदद करता है? यह शायद cronjob करने से बेहतर है, लेकिन मुझे नहीं लगता कि मैं daemontools के साथ क्या चल रहा है के आंतरिक राज्यों को बदल सकते हैं?
जोड़ा लेखक user1639926, स्रोत
प्रेषण <कोड> कीबोर्ड इंटरप्ट एस बच्चों के धागे/प्रक्रियाओं के लिए संभव नहीं है। यह केवल आपके मुख्य धागे में उठाया जाएगा। आपको अपने कार्यकर्ता को मारने के लिए अपना स्वयं का समाधान रोल करना होगा, यानी नामित पाइप
जोड़ा लेखक roippi, स्रोत
daemontools का उपयोग करें
जोड़ा लेखक yaccz, स्रोत
यह किसी भी कारण से निकलने के तुरंत बाद इसे फिर से उत्पन्न करके एक प्रक्रिया को जारी रखेगा।
जोड़ा लेखक yaccz, स्रोत
अगर self.do_actions() मृत पाश, तो self.exit_flag == कभी भी जांचें, फिर कभी निगरानी न करें।
जोड़ा लेखक PasteBT, स्रोत