美文网首页
Python之Monitor监控线程

Python之Monitor监控线程

作者: liwen2015 | 来源:发表于2018-09-10 11:26 被阅读48次

    在日常工作中常遇到这样的情况,我们需要一个监控线程用于随时的获得其他进程的任务请求,或者我们需要监视某些资源等的变化,一个高效的Monitor程序如何使用python语言实现呢?为了解决上述问题,我将我所使用的Monitor程序和大家分享,见代码

    import threading
    import random
    import time
    import sys
    
    class MonitorThread(threading.Thread):
        def __init__(self, event):
            threading.Thread.__init__(self)
            self.threadEvent = event
    
        def run(self):
            print 'Monitor is ready.\n'
            while True:
                if self.threadEvent.isSet():
                    print 'Monitor is running...\n'
                    time.sleep(.1)
                else:
                    print 'Monitor is stopped.\n'
                    break
    
    def main():
        count = 60
        cnf = 0
        event = threading.Event()
        while count >= 0:
            print 'There are %s tasks in queue!' % str(cnf)
            count -= 1
            num = random.randint(1, 100)
            if num%5 == 0:
                if cnf == 0:
                    event.set()
                    t = MonitorThread(event)
                    t.start()
                cnf += 1
            elif num%3 == 0 and num%15 != 0:
                if cnf >= 1:
                    event.clear()
                    time.sleep(2)
                if cnf >= 1:
                    cnf -= 1
        time.sleep(5)
        if cnf >= 1:
            event.clear()
    
    if __name__ == '__main__':
        sys.exit(main())
    

    上述程序会循环60次,每次产生的随机数如果能够被5整除,如果已经有monitor线程在运行,则对计数器cnf进行++的操作,否则会启动一个monitor线程;如果产生的随机数能够被3整除而不能被5整除,则会terminate当前monitor线程,对cnf进行--操作!

    程序所模拟的就是是否有任务请求,cnf用来记录当前请求的任务有那些,在我们的实际程序中,我们可以修改上述代码,增加一个等待队列用于记录请求但未得到调用的任务,而event.clear()之前我们则可以对得到请求申请的任务进行处理,当前任务结束调用之后再进行clear操作。

    相关文章

      网友评论

          本文标题:Python之Monitor监控线程

          本文链接:https://www.haomeiwen.com/subject/wndjgftx.html