Python之Monitor监控线程(干货)
在日常工作中常遇到这样的情况,我们需要一个监控线程用于随时的获得其他进程的任务请求,或者我们需要监视某些资源等的变化,一个高效的Monitor程序如何使用python语言实现呢?为了解决上述问题,我将我所使用的Monitor程序和大家分享,见代码:
1 import threading 2 import random 3 import time 4 import sys 5 6 class MonitorThread(threading.Thread): 7 def __init__(self, event): 8 threading.Thread.__init__(self) 9 self.threadEvent = event 10 11 def run(self): 12 print 'Monitor is ready.\n' 13 while True: 14 if self.threadEvent.isSet(): 15 print 'Monitor is running...\n' 16 time.sleep(.1) 17 else: 18 print 'Monitor is stopped.\n' 19 break 20 21 def main(): 22 count = 60 23 cnf = 0 24 event = threading.Event() 25 while count >= 0: 26 print 'There are %s tasks in queue!' % str(cnf) 27 count -= 1 28 num = random.randint(1, 100) 29 if num%5 == 0: 30 if cnf == 0: 31 event.set() 32 t = MonitorThread(event) 33 t.start() 34 cnf += 1 35 elif num%3 == 0 and num%15 != 0: 36 if cnf >= 1: 37 event.clear() 38 time.sleep(2) 39 if cnf >= 1: 40 cnf -= 1 41 time.sleep(5) 42 if cnf >= 1: 43 event.clear() 44 45 if __name__ == '__main__': 46 sys.exit(main())
上述程序会循环60次,每次产生的随机数如果能够被5整除,如果已经有monitor线程在运行,则对计数器cnf进行++的操作,否则会启动一个monitor线程;如果产生的随机数能够被3整除而不能被5整除,则会terminate当前monitor线程,对cnf进行--操作!
程序所模拟的就是是否有任务请求,cnf用来记录当前请求的任务有那些,在我们的实际程序中,我们可以修改上述代码,增加一个等待队列用于记录请求但未得到调用的任务,而event.clear()之前我们则可以对得到请求申请的任务进行处理,当前任务结束调用之后再进行clear操作。
感谢阅读,希望能够帮到大家!
作者:
薛定谔の喵
出处:
http://www.cnblogs.com/berlin-sun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探