Python神器:psutil库使用详解

一、背景

在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库无疑是你的必备工具。

=================================================================================================
以上就是本次的全部内容,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~ 欢迎关注下方我的公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享各类测试开发知识干货,你的支持就是作者更新最大的动力。

  • 8
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
psutil是一个跨平台的Python,用于检索有关运行中进程和系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它可以帮助我们实现系统监控、进程管理、性能分析等功能。以下是psutil的一些基本用法: 1.安装psutil ```shell pip install psutil ``` 2.获取CPU信息 ```python import psutil # 获取CPU逻辑数量 print("CPU逻辑数量:", psutil.cpu_count()) # 获取CPU物理核心 print("CPU物理核心:", psutil.cpu_count(logical=False)) # 获取CPU使用率,每秒刷新一次,累计10次 for i in range(10): print("CPU使用率:", psutil.cpu_percent(interval=1, percpu=True)) ``` 3.获取内存信息 ```python import psutil # 获取内存信息 mem = psutil.virtual_memory() print("内存总量:", mem.total) print("内存使用量:", mem.used) print("内存空闲量:", mem.free) print("内存使用率:", mem.percent) ``` 4.获取磁盘信息 ```python import psutil # 获取磁盘分区信息 partitions = psutil.disk_partitions() for partition in partitions: print("磁盘分区:", partition.device) print("文件系统类型:", partition.fstype) print("磁盘分区挂载点:", partition.mountpoint) print("磁盘分区总容量:", psutil.disk_usage(partition.mountpoint).total) print("磁盘分区使用容量:", psutil.disk_usage(partition.mountpoint).used) print("磁盘分区空闲容量:", psutil.disk_usage(partition.mountpoint).free) print("磁盘分区使用率:", psutil.disk_usage(partition.mountpoint).percent) ``` 5.获取网络信息 ```python import psutil # 获取网络接口信息 net_io = psutil.net_io_counters() print("网络总字节数:", net_io.bytes_sent + net_io.bytes_recv) print("网络总包数:", net_io.packets_sent + net_io.packets_recv) # 获取网络连接信息 connections = psutil.net_connections() for conn in connections: print("本地地址:", conn.laddr) print("远程地址:", conn.raddr) print("状态:", conn.status) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值