文章目录
- 一、背景
- 二、安装&基本使用
- 1、获取CPU信息
- 2、获取内存信息
- 3、获取磁盘信息
- 4、获取进程信息
- 三、项目应用实战
- 1、获取电脑整体的CPU、内存占用情况
- 2、获取指定进程的CPU和内存占用信息代码
- 3、将测试结果数据写入csv文件
- 4、封装方法为函数,以便后续直接调用
- 5、运行脚本
- 6、生成的csv文件内容
- 7、依赖测试数据生成趋势图,用于测试报告使用
一、背景
在Python的世界里,有一些库因其强大的功能和易用性而备受开发者们的喜爱。今天,我们要介绍的就是其中的一员——psutil库。psutil(python system and process utilities)是一个跨平台的第三方库,用于获取系统运行时的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用于系统监控,性能分析,进程管理等场景。
二、安装&基本使用
psutil安装:
pip install psutil
安装完成后,我们就可以开始使用psutil库了。下面,我们将介绍一些常用的功能。
1、获取CPU信息
psutil库可以获取CPU的使用情况。例如,我们可以使用psutil.cpu_percent(interval=1)来获取CPU的使用率。
import psutil cpu_percent = psutil.cpu_percent(interval=1) print(f'CPU usage: {cpu_percent}%')
2、获取内存信息
我们可以使用psutil.virtual_memory()来获取系统的内存使用情况。
import psutil mem_info = psutil.virtual_memory() print(f'Total memory: {mem_info.total / (1024**3):.2f} GB') print(f'Used memory: {mem_info.used / (1024**3):.2f} GB') print(f'Memory usage: {mem_info.percent}%')
3、获取磁盘信息
psutil库也可以获取磁盘的使用情况。例如,我们可以使用psutil.disk_usage(‘/’)来获取根目录的磁盘使用情况。
import psutil disk_usage = psutil.disk_usage('/') print(f'Total disk space: {disk_usage.total / (1024**3):.2f} GB') print(f'Used disk space: {disk_usage.used / (1024**3):.2f} GB') print(f'Disk usage: {disk_usage.percent}%')
4、获取进程信息
psutil库还可以获取系统中运行的所有进程的信息。例如,我们可以使用psutil.pids()来获取所有进程的PID。
import psutil pids = psutil.pids() print(f'Total processes: {len(pids)}')
三、项目应用实战
假设有这样的一个需求:长时间运行Pycharm程序,监控Pycharm程序的CPU/内存占用,以验证Pycharm程序在长时间打开的情况下,程序是否会存在CPU占用率升高或内存泄漏的情况。
基于这样的需求,我们可以使用psutil库和pandas库来完成,脚本如下:
1、获取电脑整体的CPU、内存占用情况
# 获取电脑整体的CPU、内存占用情况 def getMemory(): data = psutil.virtual_memory() memory = str(int(round(data.percent))) + "%" print("系统整体memory占用:"+memory) return memory def getCpu(): cpu_list=psutil.cpu_percent(percpu=True) average_cpu = round(sum(cpu_list) / len(cpu_list),2) cpu=str(average_cpu) + "%" print("系统整体cpu占用:"+cpu) return cpu
2、获取指定进程的CPU和内存占用信息代码
# 获取指定进程的CPU和内存占用信息代码 def getMemSize(pid): # 根据进程号来获取进程的内存大小 process = psutil.Process(pid) memInfo = process.memory_info() # rss: 该进程实际使用物理内存(包含共享库占用的全部内存)。 # vms:该进程使用的虚拟内存总量。 return memInfo.rss / 1024 / 1024 def getCpuPercent(pid): # 根据进程号来获取进程的内存大小 p = psutil.Process(pid) p_cpu = p.cpu_percent(interval=0.1) cpu = round(p_cpu,2) return cpu def getTotalM(processName): # 一个进程名对应的可能有多个进程 # 进程号才是进程的唯一标识符,进程名不是 totalM = 0 for i in psutil.process_iter(): if i.name() == processName: totalM += getMemSize(i.pid) print('进程占用内存:%.2f MB' % totalM) finalM=round(totalM,2) return finalM def getTotalCPU(processName): # 一个进程名对应的可能有多个进程 # 进程号才是进程的唯一标识符,进程名不是 totalCPU = 0 for i in psutil.process_iter(): if i.name() == processName: totalCPU += getCpuPercent(i.pid) totalCPU_convert=round(totalCPU,2) finalCPU=str(totalCPU_convert)+'%' print("进程占用CPU:"+finalCPU) return totalCPU_convert
3、将测试结果数据写入csv文件
# 将测试结果数据写入csv文件 def writeExcel(caseName,cpu,mem,pycharmcpu,pycharmmem): timestamp = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time())) dict = {'caseName': [caseName], 'Sys_CPU': [cpu], 'Sys_Memory': [mem], 'Pycharm_Cpu': [pycharmcpu], 'Pycharm_Mem': [pycharmmem],'OperationTime':[timestamp]} # 字典中的key值即为csv中列名 dataframe = pd.DataFrame(dict) dataframe['OperationTime'] = pd.to_datetime(dataframe['OperationTime']) # 将DataFrame存储为csv, mode='a'表示每一次都是追加内容而不是覆盖,header=False表示不写列名 dataframe.to_csv("cpuAndMemtest.csv", date_format='%Y-%m-%d-%H:%M:%S', mode='a',index=False,header=False,encoding='GBK')
4、封装方法为函数,以便后续直接调用
# 封装方法为函数,以便后续直接调用 def getCpuAndMem(caseName,processName1): memory = getMemory() cpu = getCpu() # 获取pycharm64.exe进程占用的CPU和内存 pycharmmem = getTotalM(processName1) pycharmcpu = str(getTotalCPU(processName1))+'%' time.sleep(1) writeExcel(caseName,cpu,memory,pycharmcpu,pycharmmem) print("系统整体CPU占用:%s 系统整体内存占用:%s 进程_CPU占用:%s 进程内存占用:%s"%(cpu, memory, pycharmcpu, pycharmmem)) print("===============================================================")
5、运行脚本
6、生成的csv文件内容
7、依赖测试数据生成趋势图,用于测试报告使用
完整的脚本代码我也上传到了我的百度网盘,需要的同学可以添加杨叔微信,加入杨叔测试交流群免费获取~
以上就是psutil库的一些基本用法。实际上,psutil库的功能远不止这些,它还可以获取网络接口信息,系统启动时间,当前用户信息等等。如果你是一名Python开发者,那么psutil库无疑是你的必备工具。
=================================================================================================
以上就是本次的全部内容,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~ 欢迎关注下方我的公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享各类测试开发知识干货,你的支持就是作者更新最大的动力。
猜你喜欢
- 3小时前翻译!翻译!AI是什么?
- 3小时前Python爬虫淘宝手机数据可视化分析大屏全屏系统
- 3小时前Deno 下一代JavaScript运行时
- 3小时前怎么修改或移除WordPress后台仪表盘概览底部的版权信息和主题信息?
- 3小时前.Net6使用SignalR实现前后端实时通信
- 3小时前pydantic 库(Python 数据接口定义)基本使用指南
- 3小时前Python中数据处理(npz、npy、csv文件;元组、列表、numpy数组的使用)
- 3小时前Python 架构模式:附录 A 到 E
- 2小时前心愿储蓄终止后钱退哪(心愿储蓄的冻结金额怎么取出)
- 38分钟前科一预约一直在受理中(科一预约一直在受理中怎么回事)
网友评论
- 搜索
- 最新文章
- 热门文章