Python模块psutil:系统进程管理与Selenium效率提升的完美结合

前言
在前面编写一个Selenium的自动化程序时候,发现一个问题。
因笔记本配置较为差,所以每次初始化Selenium的WebDriver都会非常慢,整个等待过程是不友好的。
所以我就想到:
-
在程序中初始化一个全局的
WebDriver对象,在程序结束之后不退出Selenium打开的浏览器。这样就只需要启动一次
Selenium打开的浏览器,后面都使用这个浏览器。
这样的确是个好主意,但随之而来的问题是:
-
?万一
Selenium打开的浏览器被系统回收或者出现异常了,那么程序运行就会出错!
所以在最终,整个问题解决的思路如下:
- 程序运行前先检测指定的
Selenium浏览器(系统进程)是否存在; - 如果存在则往后运行程序;
- 如果不存在则先打开
Selenium浏览器,再往后运行程序。
文章的标题虽然为 Python psutil:系统进程管理与Selenium效率提升的完美结合,但是应用场景却是很广的,譬如系统监控、系统监控、性能分析、限制系统资源、管理进程。
本文主要借助于 Python 的 psutil模块来实现,所以下面更多的是介绍 psutil模块的使用。
当然,重要的并不是使用什么工具,而是怎么使用工具,以及工具能帮助我们解决哪些问题。
知识点
| 模块 | 解释 |
|---|---|
| psutil | 用于在 Python 中检索有关运行进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。 |
具体的介绍看下图:
psutil(python system and process utilities)是一个跨平台库,用于访问操作系统的进程和系统利用率(CPU、内存、磁盘、网络等)。它主要用于系统监控,分析和限制系统资源,以及管理运行的进程。它实现了Unix命令行工具提供的许多功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。

应用场景
在使用selenium进行自动化测试时,每次开启和销毁浏览器窗口都会消耗系统资源。使用psutil来监控selenium的浏览器窗口。如果检测到窗口已经存在,就可以复用这个窗口,而不是每次都创建新的窗口。这样可以节省消耗系统资源。
psutil还可以用于多种场景,包括系统监控、性能分析、限制系统资源、管理进程等。
psutil的基础使用
这部分操作,在官方文档中都可以找到。
获取CPU 信息
import psutil# 获取CPU的数量
cpu_count = psutil.cpu_count()
print(f'Number of CPUs: {cpu_count}')# 获取CPU的使用率
cpu_percent = psutil.cpu_percent()
print(f'CPU usage: {cpu_percent}%')# 获取CPU的详细信息
cpu_times = psutil.cpu_times()
print(f'CPU times: {cpu_times}')
获取 内存 信息
# 获取系统的内存使用情况
mem_info = psutil.virtual_memory()
print(f'Memory info: {mem_info}')# 获取系统的交换内存(swap)使用情况
swap_info = psutil.swap_memory()
print(f'Swap info: {swap_info}')
获取 磁盘 信息
# 获取磁盘分区信息
disk_partitions = psutil.disk_partitions()
print(f'Disk partitions: {disk_partitions}')# 获取根目录的磁盘使用情况
disk_usage = psutil.disk_usage('/')
print(f'Disk usage: {disk_usage}')# 获取磁盘IO信息
disk_io = psutil.disk_io_counters()
print(f'Disk IO: {disk_io}')
获取 网络 信息
# 获取网络IO信息
net_io = psutil.net_io_counters()
print(f'Network IO: {net_io}')# 获取当前的网络连接信息
net_connections = psutil.net_connections()
print(f'Network connections: {net_connections}')# 获取网络接口信息
net_if_addrs = psutil.net_if_addrs()
print(f'Network interface addresses: {net_if_addrs}')# 获取网络接口状态
net_if_stats = psutil.net_if_stats()
print(f'Network interface stats: {net_if_stats}')
获取 进程 信息
# 获取当前运行的所有进程ID
pids = psutil.pids()
print(f'Process IDs: {pids}')# 获取所有进程实例
for proc in psutil.process_iter(['pid', 'name', 'username']):print(proc.info)# 获取指定PID的进程实例
pid = 1
if psutil.pid_exists(pid):proc = psutil.Process(pid)print(f'Process info: {proc.info()}')
监控系统进程代码
指定chrome版
这里用到我之前的一篇Selenium文章,【Selenium】控制当前已经打开的 chrome浏览器窗口
文章中提到,在命令行使用以下命令去驱动Selenium浏览器
chrome.exe --remote-debugging-port=9527 --user-data-dir=“F:\selenium”
因为使用了命令行去执行,所以在代码中需要检索:是否包含指定命令函参数
在我的Selenium项目中,检测该Selenium浏览器受否存在的代码如下所示:
- 看不懂就看注释啪🥧~

代码释义:
这份代码的主要用途是检查是否有包含特定命令行参数的Chrome浏览器进程正在运行。它遍历所有正在运行的进程,如果进程的名称包含"chrome",并且命令行参数中包含--remote-debugging-port=port,那么就返回True,否则返回False。这对于自动化测试非常有用,可以避免重复创建和销毁浏览器窗口,从而节省系统资源。
通用版
下面函数可以用于监控特定的进程是否在运行。例如,你可能有一个重要的服务或应用,你希望确保它始终在运行。你可以定期运行这个函数来检查这个服务或应用是否在运行,如果不在运行,可以采取相应的操作,如重新启动服务或应用。
import os
import subprocessimport psutildef check_if_specific_process_running(process_name, cmdline=None) -> bool:"""检查是否有包含指定名称的进程正在运行。Args:process_name(str): 要检查的进程名cmdline(str): 要检查的命令行参数。默认为None。Returns:bool: 如果找到匹配的进程则返回True,否则返回False。"""# 遍历所有正在运行的进程for proc in psutil.process_iter():try:# 检查进程名是否包含给定的名称字符串if process_name.lower() in proc.name().lower():# 获取进程详细信息列表p_info = proc.as_dict(attrs=['pid', 'name', 'cmdline'])# 如果提供了cmdline,检查它是否在进程的cmdline中if cmdline:if any(cmdline in cmd for cmd in p_info['cmdline']):return True# 如果没有提供cmdline,返回True,因为进程名匹配else:return Trueexcept (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):passreturn Falsedef exec_cmd_command():"""切换到指定路径,若有。然后打开浏览器Returns:True"""os.chdir(path=config.CHROME_PATH)subprocess.Popen(r'chrome.exe --remote-debugging-port=9527 --user-data-dir="F:\selenium"',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)return Trueif __name__ == '__main__':if not check_if_specific_chrome_running():# 打开浏览器exec_cmd_command()
总结
psutil是一个强大的库,可以用于获取系统和进程的信息,以及管理进程。它在系统监控、性能分析、资源管理等方面都有广泛的应用。本文中代码是一个很好的例子,展示了如何使用psutil来检查特定的浏览器进程是否正在运行,从而避免重复创建和销毁窗口,节省系统资源。
后话
本次分享到此结束,
see you🎉🎉
相关文章:
Python模块psutil:系统进程管理与Selenium效率提升的完美结合
前言 在前面编写一个Selenium的自动化程序时候,发现一个问题。 因笔记本配置较为差,所以每次初始化Selenium的WebDriver都会非常慢,整个等待过程是不友好的。 所以我就想到: 在程序中初始化一个全局的WebDriver对象,…...
glibc 里的线程 id
这里讲的是通过 pthread_create() 函数返回的线程 id,其实就是 glibc 库里维护的线程id,它跟内核维护的线程 id 不一样,pthread_create() 返回的线程 id 并不一定是唯一的。我们看 pthread_create 函数的源码,它最后返回的线程 id…...
nacos的部署与配置中心
文章目录 一、nacos部署安装的方式单机模式:集群模式:多集群模式: 二、安装的步骤1、预备环境准备2、载安装包以及安装2.1、Nacos有以下两种安装方式:2.2、更换数据源数据源切换为MySQL 2.3、开启控制台授权登录(可选) 3、配置中心的使用3.1、创建配置信…...
undefined 与 undeclared 的区别?
在 JavaScript 中,undefined 和 undeclared 是两个不同的概念,表示不同的情况: 1:undefined: undefined 是一个特殊的值,表示一个变量已经被声明,但尚未被赋予一个值。当一个变量被声明但未进…...
Leetcode周赛370补题(3 / 3)
目录 1、找到冠军 Ⅰ- 暴力 2、找到冠军 Ⅱ - 寻找入度为0的点 3、在树上执行操作以后得到的最大分数 - dfs树 逆向思考 1、找到冠军 Ⅰ- 暴力 100115. 找到冠军 I class Solution {public int findChampion(int[][] g) {int ng.length;for(int i0;i<n;i){int cnt0;for…...
PyTorch深度学习实战——图像着色
PyTorch深度学习实战——图像着色 0. 前言1. 模型与数据集分析1.1 数据集介绍1.2 模型策略 2. 实现图像着色相关链接 0. 前言 图像着色指的是将黑白或灰度图像转换为彩色图像的过程,传统的图像处理技术通常基于直方图匹配和颜色传递的方法或基于用户交互的方法等完…...
InfiniBand 的前世今生
今年,以 ChatGPT 为代表的 AI 大模型强势崛起,而 ChatGPT 所使用的网络,正是 InfiniBand,这也让 InfiniBand 大火了起来。那么,到底什么是 InfiniBand 呢?下面,我们就来带你深入了解 InfiniBand…...
分享一下微信小程序里怎么添加社区团购功能
随着互联网的快速发展,线上购物已经成为我们日常生活的一部分。而在这个数字化时代,微信小程序作为一种便捷的电商渠道,正逐渐成为新的趋势。其中,社区团购功能更是受到广大用户的热烈欢迎。本文将探讨如何在微信小程序中添加社区…...
软考高项-IT部分
信息化体系 信息化技术应用:龙头 信息资源:核心任务 信息网络:应用基础 信息技术和产业:建设基础 信息化人才:成功之本 信息化法规:保障 信息化趋势 产业信息化、产品信息化、社会生活信息化、国民经济信息化 新型基础设施建设 2018年召开的中央经济工作会议,首…...
hugetlb核心组件
1 概述 hugetlb机制是一种使用大页的方法,与THP(transparent huge page)是两种完全不同的机制,它需要: 管理员通过系统接口reserve一定量的大页,用户通过hugetlbfs申请使用大页, 核心组件如下图: 围绕着…...
vscode配置环境变量
首先点击下面这个链接。 sMinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 然后选择Files这个选项 向下移选择下载这个文件 解压完成之后,找到这个文件的bin目录复制路径后,添加到环境变量中 依次点击后打开cmd࿰…...
react:封装组件
封装 /components/Pagination.tsx import React from react import { Pagination } from antdconst PaginationWarp ({ total, paramsInfo, setParamsInfo }) > {return (<Paginationtotal{total}current{paramsInfo.page}showSizeChangershowQuickJumperdefaultPageSi…...
基于深度学习的视频多目标跟踪实现 计算机竞赛
文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 …...
linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、Wi-Fi热点
linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、自动安装Wi-Fi热点。 最近在做路由器二次开发,现在市面上卖的新设备,大多数都采用了2.5G网卡,…...
asp.net上传文件
第一种方法 前端: <div> 单文件上传 <form enctype"multipart/form-data" method"post" action"upload.aspx"> <input type"file" name"files" /> …...
JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)
JavaEE平台技术——预备知识(Web、Sevlet、Tomcat) 1. Web基础知识2. Servlet3. Tomcat并发原理 1. Web基础知识 🆒🆒上个CSDN我们讲的是JavaEE的这个渊源,实际上讲了两个小时的历史课,给大家梳理了一下&a…...
基础课23——设计客服机器人
根据调查数据显示,使用纯机器人完全替代客服的情况并不常见,人机结合模式的使用更为普遍。在这两种模式中,不满意用户的占比都非常低,不到1%。然而,在满意用户方面,人机结合模式的用户满意度明显高于其他模…...
mybatis在springboot当中的使用
1.当使用Mybatis实现数据访问时,主要: - 编写数据访问的抽象方法 - 配置抽象方法对应的SQL语句 关于抽象方法: - 必须定义在某个接口中,这样的接口通常使用Mapper作为名称的后缀,例如AdminMapper - Mybatis框架底…...
如何处理前端本地存储和缓存
前端本地存储和缓存的处理是一种重要的技术,它可以帮助改善应用程序的性能和用户体验。下面是一些处理前端本地存储和缓存的常用方法: 1. 使用Web Storage API: 这是一种在浏览器中存储数据的方法,包括两种类型:loca…...
导轨式安装压力应变桥信号处理差分信号输入转换变送器0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA
主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入端和输…...
2025_NIPS_G1: Teaching LLMs to Reason on Graphs with Reinforcement Learning
文章核心总结与创新点 核心内容 本文针对大型语言模型(LLMs)在图推理任务中表现有限的问题,提出了一种基于强化学习(RL)的方法G1。通过在大规模合成图论任务数据集Erdős上训练,G1显著提升了LLMs的图推理能力,且在未见过的任务、领域和图编码方案中表现出强泛化性,同…...
tao-8k性能优化小技巧:如何提升向量化与检索速度
tao-8k性能优化小技巧:如何提升向量化与检索速度 1. 理解tao-8k的性能瓶颈 1.1 模型架构特点 tao-8k作为支持8192长度上下文的嵌入模型,其核心优势在于长文本处理能力。然而,这种能力也带来了独特的性能挑战: 计算复杂度&…...
memtest_vulkan显存检测终极指南:从问题识别到健康管理
memtest_vulkan显存检测终极指南:从问题识别到健康管理 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 一、显存故障问题识别:图形渲染异…...
丝印层—PCB封装的信息标识系统
如果说焊盘是 PCB 封装的 “硬件骨架”,那么丝印层(Silkscreen) 就是封装的 “信息标识系统”,是 PCB 表面最直观的 “说明书”。一、丝印层的基础定义与特性丝印层,又称 “文字层”“标识层”,是 PCB 表…...
如何用LangChain开发一个Agent,20分钟包教包会!
26年一定是一个 Agent 大年,我这边持续出系列文章,帮助大家更好的落地 Agent,今天的重点是程序员最常用的 Agent 框架 LangChain。 只不过这东西可能由于 AI Coding 的成熟,由给人看变成给 AI 看的。 LangChain 既是一个开源的A…...
大麦网抢票自动化工具:5分钟快速上手完整指南
大麦网抢票自动化工具:5分钟快速上手完整指南 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 你是否曾经因为抢不到心仪的演唱会门…...
OmenSuperHub深度解析:惠普游戏本硬件控制的纯净解决方案
OmenSuperHub深度解析:惠普游戏本硬件控制的纯净解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 对于追求极致性能与系统纯净度的惠普…...
新手福音:通过快马ccswitch模型轻松生成你的第一个博客页面代码
作为一名刚接触编程的新手,想要搭建个人博客主页却不知从何下手,这确实是个常见难题。最近我在InsCode(快马)平台尝试了ccswitch模型,发现它特别适合零基础学习者快速入门。下面分享我的实践过程,希望能帮到同样想入门前端开发的朋…...
颠覆式效率工具:BaiduPanFilesTransfers重构百度网盘批量管理流程
颠覆式效率工具:BaiduPanFilesTransfers重构百度网盘批量管理流程 【免费下载链接】BaiduPanFilesTransfers 百度网盘批量转存、分享和检测工具 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPanFilesTransfers 在数字化办公与资源管理场景中ÿ…...
OpenClaw浏览器自动化:千问3.5-9B实现智能爬虫
OpenClaw浏览器自动化:千问3.5-9B实现智能爬虫 1. 为什么需要智能爬虫? 去年我接手了一个市场调研项目,需要从200多个电商页面提取商品信息和用户评价。传统爬虫遇到三个致命问题:动态加载内容抓取不全、验证码频繁拦截、非结构…...
