在日常工作中常遇到这样的情况,我们需要一个监控线程用于随时的获得其他进程的任务请求,或者我们需要监视某些资源等的变化,一个高效的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监控线程(干货)的更多相关文章

  1. python之进程与线程

    什么是操作系统       可能很多人都会说,我们平时装的windows7 windows10都是操作系统,没错,他们都是操作系统.还有没有其他的? 想想我们使用的手机,Google公司的Androi ...

  2. python之路: 线程、进程和协程

    进程和线程 既然看到这一章,那么你肯定知道现在的系统都是支持“多任务”的操作,比如: Mac OS X,UNIX,Linux,Windows等. 多任务:简单地说就是同时运行多个任务.譬如:你可以一边 ...

  3. Jetty监控线程使用情况的配置

    Jetty监控线程使用情况配置 第一步,配置xml文件 jetty-monitor.xml 参数说明: threads: 线程池中的线程 busyThreads: 使用中的线程 idleThreads ...

  4. Jmeter性能测试之Monitor监控(SSHMon Samples Collector)

    前面写的一篇Monitor监控有缺陷, 这篇文章使用Jmeter4.0+的版本, 使用插件SSHMon Samples Collector来做资源监控 1. 官网下载插件: plugins-manag ...

  5. python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序

    python简单的监控脚本-利用socket.psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取 ...

  6. 通过micrometer实时监控线程池的各项指标

    通过micrometer实时监控线程池的各项指标 前提 最近的一个项目中涉及到文件上传和下载,使用到JUC的线程池ThreadPoolExecutor,在生产环境中出现了某些时刻线程池满负载运作,由于 ...

  7. python使用threading获取线程函数返回值的实现方法

    python使用threading获取线程函数返回值的实现方法 这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下 threading用于提供线程相 ...

  8. Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)

    package com; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; i ...

  9. python学习笔记12 ----线程、进程

    进程和线程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进程里的 ...

随机推荐

  1. COGS 133. [USACO Mar08] 牛跑步

    ★★★   输入文件:cowjog.in   输出文件:cowjog.out   简单对比时间限制:1 s   内存限制:128 MB Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她 ...

  2. HTTPs与HTTP的性能

    (参考:https://blog.csdn.net/chinafire525/article/details/78911734 https://blog.csdn.net/hherima/articl ...

  3. 实验3 分支&循环语句(1)

    part  1 1.在循环中使用控制语句continue和break,其功能区别是: continue:只控制本次循环的结束. break:终止并跳出循环,之后的循环也不再执行. 2.在两层嵌套循环中 ...

  4. IIS应用程序池"启用32位"导致服务不可用的503错误

    原来运行正常的站点,突然不正常了,出现503错误.查看操作系统的日志查看器显示: 由于配置问题,无法加载模块 DLL“C:\Program Files (x86)\IIS\Asp.Net Core M ...

  5. ios之UIButoon

    第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...

  6. (65)login as guest zabbix无法进入登陆界面

    很早之前有一位群友告知zabbix登陆不了,一直有如下提示:Access denied.Your are logged in as guest. You have no permissions to ...

  7. 命令行发送UDP

    https://www.cnblogs.com/Dennis-mi/articles/6866762.html: 如果往本地UDP端口發送數據,那麼可以使用以下命令:echo “hello” > ...

  8. Linux菜鸟起飞之路【二】Linux基本常识

    一.Unix操作系统基本常识 1.什么是Unix? Unix是一个计算机操作系统,是一个用来协调.管理和控制计算机硬件与软件资源的控制程序. 2.Unix操作系统的特点? 多用户与多任务.多用户表示在 ...

  9. 快照、克隆,xshell优化,Linux历史

    目录 一.虚拟拍照功能 二.虚拟机克隆功能 三.Xshell的优化 四.介绍Linux历史 一.虚拟拍照功能 1.拍摄快照 关机状态拍照 关机命令:shutdown -h now 或者 init 0 ...

  10. BZOJ 1587: 叶子合并leaves

    题目大意:求n个数分成k段的最小代价. 题解:DP,没什么好说的. 代码: #include<cstdio> #include<algorithm> using namespa ...