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 memorydef 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、运行脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22462.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】搜索二叉树/map/set

二叉搜索树(搜索二叉树) 1.1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则…

决策树(Decision Tree)

文章目录 一、决策树 一、决策树 决策树在机器学习中也是比较常见的一种算法,属于监督学习中的一种。看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉“亲切”许多。 优点:计算复杂度不…

Web3与物联网行业:实现安全、可信与智能的连接

随着物联网技术的快速发展,我们正迎来一个高度互联、智能化的未来。而Web3作为互联网的下一次演进,将为物联网行业带来重要的变革。 本文将探讨Web3在物联网行业中的应用前景和优势,以及如何实现安全、可信和智能的连接。 第一部分&#xff…

QT Quick初学笔记---第一篇

链接: QML Book中文版(QML Book In Chinese) 1、对Qt Quick的初步认识 Qt Quick是Qt5界面开发技术的统称,是以下几种技术的集合: QML:界面标记语言JavaScript:动态脚本语言QT C:跨平台C封装库 QML是与HTML类似的一…

OpenCV 入门教程:中值滤波和双边滤波

OpenCV 入门教程:中值滤波和双边滤波 导语一、中值滤波二、双边滤波三、示例应用3.1 图像去噪3.2 图像平滑 总结 导语 在图像处理和计算机视觉领域,中值滤波和双边滤波是两种常见的滤波方法,用于平滑图像、去除噪声等。 OpenCV 提供了中值滤…

抖音seo矩阵系统源码|需求文档编译说明(技术)

1.抖音seo矩阵系统文档开发流程 抖音SEO矩阵指的是一系列通过搜索引擎优化(SEO)技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上,用户可以通过搜索关键词来查找与其相关的视频和账号。因此,抖音SEO矩阵的主要目…

大模型与端到端会成为城市自动驾驶新范式吗?

摘要: 最近可以明显看到或者感受到第一梯队的城市自动驾驶量产已经进入快车道,他们背后所依靠的正是当下最热的大模型和端到端的技术。 近期,城市自动驾驶量产在产品和技术上都出现了新的变化。 在产品层面,出现了记性行车或者称…

macOS 开发 - 纯代码生成 Window

文章目录 1、创建项目删除项目自带 window创建 BaseWindowController 继承自 NSWindowController子 WC 继承 BaseWC个人更喜欢纯代码:控制力、方便复制,不用卡卡的打开 xib 这里不使用各种项目自带的 storyboard/xib,使用纯代码创建 window(controller) 本示例代码将创建如下…

【Linux详解】——文件系统(磁盘结构、软硬链接、动静态库)

📖 前言:本期介绍文件系统。 目录 🕒 1. 磁盘结构🕘 1.1 物理结构🕘 1.2 存储结构🕘 1.3 逻辑结构 🕒 2. 文件系统🕘 2.1 对 IO 单位的优化🕘 2.2 磁盘分区与分组&#x…

揭秘GPT-4;Adobe Firefly AI 扩大测试规模

🦉 AI新闻 🚀 Adobe Firefly AI 扩大测试规模,支持100多种语言的输入 摘要:Adobe宣布扩大测试规模,Adobe Firefly AI现在支持100多种语言的 prompts 输入。网页测试版Firefly已经扩充了罗马尼亚语等多种语言&#xf…

最新华为鸿蒙4.0安装谷歌服务框架,安装Play商店,谷歌Google,GMS

最近华为推出了最新鸿蒙4.0开发者Beta版本,让用户测试体验。那么测试体验的机器主要是最近发布的几款机器为P60,P60 Pro, mate50,mate50 pro等几款产品可以先期进行体验测试鸿蒙4.0,那么很多的用户在疑问我升级到鸿蒙4.0。是不是还是可以使用Google谷歌服…

HTML特性(attribute)和DOM属性(property)

文章目录 定义位置不同attributeproperty 范围不同属性映射行为区别数据类型不同大小写敏感区别相同属性返回值可能不同DOM 属性具有写保护 定义位置不同 attribute 是 HTML 标签上的某个属性,如 id、class、value 等以及自定义属性,定义后会呈现在标签上 proper…