找回密码
 会员注册
查看: 21|回复: 0

Python神器:psutil库使用详解

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71619
发表于 2024-9-9 13:11:51 | 显示全部楼层 |阅读模式
文章目录一、背景二、安装&基本使用1、获取CPU信息2、获取内存信息3、获取磁盘信息4、获取进程信息三、项目应用实战1、获取电脑整体的CPU、内存占用情况2、获取指定进程的CPU和内存占用信息代码3、将测试结果数据写入csv文件4、封装方法为函数,以便后续直接调用5、运行脚本6、生成的csv文件内容7、依赖测试数据生成趋势图,用于测试报告使用一、背景在Python的世界里,有一些库因其强大的功能和易用性而备受开发者们的喜爱。今天,我们要介绍的就是其中的一员——psutil库。psutil(pythonsystemandprocessutilities)是一个跨平台的第三方库,用于获取系统运行时的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用于系统监控,性能分析,进程管理等场景。二、安装&基本使用psutil安装:pipinstallpsutil1安装完成后,我们就可以开始使用psutil库了。下面,我们将介绍一些常用的功能。1、获取CPU信息psutil库可以获取CPU的使用情况。例如,我们可以使用psutil.cpu_percent(interval=1)来获取CPU的使用率。importpsutilcpu_percent=psutil.cpu_percent(interval=1)print(f'CPUusage:{cpu_percent}%')1234'运行运行2、获取内存信息我们可以使用psutil.virtual_memory()来获取系统的内存使用情况。importpsutilmem_info=psutil.virtual_memory()print(f'Totalmemory:{mem_info.total/(1024**3):.2f}GB')print(f'Usedmemory:{mem_info.used/(1024**3):.2f}GB')print(f'Memoryusage:{mem_info.percent}%')123456'运行运行3、获取磁盘信息psutil库也可以获取磁盘的使用情况。例如,我们可以使用psutil.disk_usage(‘/’)来获取根目录的磁盘使用情况。importpsutildisk_usage=psutil.disk_usage('/')print(f'Totaldiskspace:{disk_usage.total/(1024**3):.2f}GB')print(f'Useddiskspace:{disk_usage.used/(1024**3):.2f}GB')print(f'Diskusage:{disk_usage.percent}%')123456'运行运行4、获取进程信息psutil库还可以获取系统中运行的所有进程的信息。例如,我们可以使用psutil.pids()来获取所有进程的PID。importpsutilpids=psutil.pids()print(f'Totalprocesses:{len(pids)}')1234'运行运行三、项目应用实战假设有这样的一个需求:长时间运行Pycharm程序,监控Pycharm程序的CPU/内存占用,以验证Pycharm程序在长时间打开的情况下,程序是否会存在CPU占用率升高或内存泄漏的情况。基于这样的需求,我们可以使用psutil库和pandas库来完成,脚本如下:1、获取电脑整体的CPU、内存占用情况#获取电脑整体的CPU、内存占用情况defgetMemory():data=psutil.virtual_memory()memory=str(int(round(data.percent)))+"%"print("系统整体memory占用:"+memory)returnmemorydefgetCpu():cpu_list=psutil.cpu_percent(percpu=True)average_cpu=round(sum(cpu_list)/len(cpu_list),2)cpu=str(average_cpu)+"%"print("系统整体cpu占用:"+cpu)returncpu1234567891011121314'运行运行2、获取指定进程的CPU和内存占用信息代码#获取指定进程的CPU和内存占用信息代码defgetMemSize(pid):#根据进程号来获取进程的内存大小process=psutil.Process(pid)memInfo=process.memory_info()#rss:该进程实际使用物理内存(包含共享库占用的全部内存)。#vms:该进程使用的虚拟内存总量。returnmemInfo.rss/1024/1024defgetCpuPercent(pid):#根据进程号来获取进程的内存大小p=psutil.Process(pid)p_cpu=p.cpu_percent(interval=0.1)cpu=round(p_cpu,2)returncpudefgetTotalM(processName):#一个进程名对应的可能有多个进程#进程号才是进程的唯一标识符,进程名不是totalM=0foriinpsutil.process_iter():ifi.name()==processName:totalM+=getMemSize(i.pid)print('进程占用内存:%.2fMB'%totalM)finalM=round(totalM,2)returnfinalMdefgetTotalCPU(processName):#一个进程名对应的可能有多个进程#进程号才是进程的唯一标识符,进程名不是totalCPU=0foriinpsutil.process_iter():ifi.name()==processName:totalCPU+=getCpuPercent(i.pid)totalCPU_convert=round(totalCPU,2)finalCPU=str(totalCPU_convert)+'%'print("进程占用CPU:"+finalCPU)returntotalCPU_convert12345678910111213141516171819202122232425262728293031323334353637383940'运行运行3、将测试结果数据写入csv文件#将测试结果数据写入csv文件defwriteExcel(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')1234567891011'运行运行4、封装方法为函数,以便后续直接调用#封装方法为函数,以便后续直接调用defgetCpuAndMem(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("===============================================================")123456789101112'运行运行5、运行脚本6、生成的csv文件内容7、依赖测试数据生成趋势图,用于测试报告使用完整的脚本代码我也上传到了我的百度网盘,需要的同学可以添加杨叔微信,加入杨叔测试交流群免费获取~以上就是psutil库的一些基本用法。实际上,psutil库的功能远不止这些,它还可以获取网络接口信息,系统启动时间,当前用户信息等等。如果你是一名Python开发者,那么psutil库无疑是你的必备工具。=================================================================================================以上就是本次的全部内容,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~欢迎关注下方我的公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享各类测试开发知识干货,你的支持就是作者更新最大的动力。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 05:38 , Processed in 0.812405 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表