#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import datetime
import time
import psutil
from ctypes import *"""
性能测试示例Python代码:1、获取系统性能指标(内存、cpu、GDI、IO)2、保存数据至日志文件 (./******.log)3、可同时监控多个程序(xiadan:hexin)
"""class PerfMonitor(object):def __init__(self, pnames, monitor_time):self.pnames = pnamesself.monitor_time = monitor_timeself.perflog = "./"self.perfimg = "./"def getGDIcount(self,PID):PH = windll.kernel32.OpenProcess(5432, 0, PID)GDIcount = windll.user32.GetGuiResources(PH, 0)windll.kernel32.CloseHandle(PH)return GDIcountdef time_wait(self,proc_name):# 增加隐形等待时间pid_list = []now_data = time.time()while time.time() < now_data + 35:pid_data = list(filter(lambda x: x.name() == proc_name, psutil.process_iter()))if pid_data != []:pid_list.append(list(pid_data)[0].pid)breakelse:time.sleep(0.1)return pid_listdef get_pid(self,pnames):# 获取进程号列表pnames = map(lambda x : (x + ".exe"), pnames.split(":"))pid_lists = []for proc_name in pnames:pid = self.time_wait(proc_name)pid_lists.extend(pid)return pid_listsdef write_logs(self,log_filepath,usagestr):# 数据写入log日志fp=open(log_filepath,"a")fp.write(usagestr)fp.close()def get_nowtime(self):# 获取现在时间now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")return now_timedef get_log_filepaths(self, p, monitor, types, check_times):name = p.name()names = name.split(".")[0]current = check_timesusagestr = current + "\t" + str(monitor) + "\n"log_filepath = self.perflog + types + "-" + names + "-" + str(p.pid) + ".log"self.write_logs(log_filepath,usagestr)def perfrun(self):try:monitorsecond = self.monitor_time * 60begintime = int(time.time())p_list = []for pid in self.get_pid(self.pnames):p_list.append((pid,psutil.Process(int(pid))))while((int(time.time()) - begintime) <= monitorsecond):for (pid, p) in p_list:# 内存mem_time = self.get_nowtime()memusage = p.memory_info().rss/1024.0/1024.0# CPUcpu_time = self.get_nowtime()cpuusage = p.cpu_percent()# GDIgdi_time = self.get_nowtime()GDIcount = self.getGDIcount(pid)# IOiousage = p.io_counters()read_count_time = self.get_nowtime()read_count = iousage.read_countwrite_count_time = self.get_nowtime()write_count = iousage.write_countread_bytes_time = self.get_nowtime()read_bytes = iousage.read_byteswrite_bytes_time = self.get_nowtime()write_bytes = iousage.write_bytes# 写入日志self.get_log_filepaths(p, memusage, "mem", mem_time)self.get_log_filepaths(p, cpuusage, "cpu", cpu_time)self.get_log_filepaths(p, GDIcount, "gdi", gdi_time)self.get_log_filepaths(p, read_count, "io-read-count", read_count_time)self.get_log_filepaths(p, write_count, "io-write-count", write_count_time )self.get_log_filepaths(p, read_bytes, "io-read-bytes", read_bytes_time)self.get_log_filepaths(p, write_bytes, "io-write-bytes", write_bytes_time)time.sleep(2)now = datetime.datetime.now().strftime("%y-%m-%d-%H-%M-%S")except Exception as e:print(e)if __name__ == '__main__':if(len(sys.argv) == 3):pnames=sys.argv[1]monitor_time=int(sys.argv[2])else:print("""|====================================================================================|""")print("""|                              Usage Instructions                                    |""")print("""|====================================================================================|""")print("""|  usage              : python perfmonitor.py pnames monitor_time (minute)           |""")print("""|  example            : python perfmonitor.py xiadan:hexin 10                        |""")print("""|====================================================================================|""")pnames = "xiadan"monitor_time = 5perfm = PerfMonitor(pnames, monitor_time)perfm.perfrun()

【性能测试】获取性能系统指标之示例Python代码相关推荐

  1. 图像分割评测指标MIOU之python代码详解

    Pixel Accuracy(PA,像素精度):这是最简单的度量,为标记正确的像素占总像素的比例. Mean Pixel Accuracy(MPA,均像素精度):是PA的一种简单提升,计算每个类内被正 ...

  2. c调用python脚本如何获取结果_使用C++调用Python代码的方法详解

    一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性-&g ...

  3. python获取交易软件数据_几行Python代码,轻松获取美股阿里巴巴的交易数据

    原创: 野马 菜鸟学Python 学Python可以干很多事情,比如爬虫,数据分析,机器学习,但是有一个非常小众的分支,不仅结合了两大高薪行业,而且还薪水非常诱人,就是量化金融岗位.目前Python已 ...

  4. 帮我写一段能实时获取经纬度和具体地区的python代码

    你好,你可以使用 Python 的 geocoder 库来实现实时获取经纬度和具体地区的功能. 首先,你需要安装 geocoder 库,使用以下命令安装: pipinstall geocoder 然后 ...

  5. 在Ubuntu中获取奥比中光的深度值 Python代码

    一.官网下载资料 https://developer.orbbec.com.cn/download.html?id=32下载SDK,并解压到Ubuntu中 二.进行后续工作 奥比中光Astra s P ...

  6. QQmusic python,js获取sign及音频爬虫示例

    目录 js获取sign sign是什么 sign获取 sign加密方式 音频爬虫示例 Python代码(调用js文件) js获取sign sign是什么 以本人喜欢的歌手(ふじた まいこ)主页为示例 ...

  7. php中files和FILRS,php获取文件内容最后一行示例

    php获取文件内容最后一行示例 复制代码 代码如下: $rs = 'README.md'; $fp = fopen($rs, 'r'); fseek($fp,-1,SEEK_END); $s = '' ...

  8. 【理论 | 代码】机器学习分类与回归性能评估指标大全

    一.回归指标 1.1 均方误差(Mean Squared Error, MSE) MSE 称为均方误差,又被称为 L2 范数损失,该统计参数是预测数据和原始数据对应点误差的平方和的均值,公式如下: M ...

  9. 伯努利方程示例 Python 计算(汽水流体和喷泉工程)

    伯努利原理 在流体的水平流动中,流体速度较高的点比流体速度较慢的点具有更小的压力. 不可压缩流体在到达狭窄的收缩部分时必须加速,以保持恒定的体积流量. 这就是为什么软管上的窄喷嘴会导致水流加速的原因. ...

最新文章

  1. fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack:
  2. docker tomcat mysql_Docker下Tomcat容器中使用Mysql的方法
  3. 查看spark是否有僵尸进程,有的话,先杀掉。可以使用下面命令
  4. 面试奇葩——交换两变量值的一些邪门歪道
  5. php实现pdf文件的生成与下载
  6. 作者:张群(1988-),女,博士,中国电子技术标准化研究院设备与数据研究室副主任。...
  7. C++:错误(活动) E0144 “const char *“ 类型的值不能用于初始化 “char *“ 类型的实体
  8. JSON解析工具比较,主要GSON和FastJSON
  9. java个人中心修改界面怎么整_怎么对个人中心页面访问进行控制
  10. 解决ubuntu下不能mount windows 盘的问题
  11. NYOJ--114--某种序列(大数)
  12. 基于WeMos的WiFi避障小车
  13. 电脑控制所有手机的两种方式
  14. android 7 sl4a,SL4A蟒蛇作出android手机
  15. 《objective-c程序设计》学习笔记
  16. python比较火的培训机构
  17. 计数排序 | Counting Sort
  18. 残差分析(残差原理与标准化残差分析)
  19. 织梦dedecms网站地图生成在根目录的开发教程
  20. 【FreeRTOS】

热门文章

  1. 百度地图修改底图样式
  2. Scrapy爬取网页并保存到数据库中
  3. HDU 1218 - Blurred Vision
  4. 2016-ICLR-Order Matters- Sequence to sequence for sets
  5. redis windows版下载教程,及双系统百度网盘资源分享
  6. 老白理解的REDO LOG
  7. 零售行业数据分析运用
  8. jQuery 遍历 - 后代
  9. 来自灵魂的拷问:之迁移之后SQL执行变慢了
  10. 针对Typora for Win v0.11.18最后一个免费版本安装后提示更新解决办法This beta version of Typora Q is expired