如何测量单个Python脚本运行时的CPU与内存占用?
测量Python脚本的CPU与内存占用方法
1. 安装psutil库
首先确保安装了psutil:
pip install psutil
2. 核心思路:监控当前进程的状态
psutil通过psutil.Process()获取当前Python进程的实例,只需要在脚本开头初始化一次,后续用这个实例查询不同阶段的资源状态即可——不需要每次查询都重新初始化。
3. 内存占用测量(基础版)
通过对比业务代码执行前后的内存状态,得到代码段的内存消耗:
import psutil # 初始化当前进程对象 process = psutil.Process() # 记录执行前的物理内存(RSS:实际占用的物理内存,单位字节) mem_before = process.memory_info().rss # -------------------------- # 你的业务代码 a = 5 b = 6 c = 3 result = (a * b) + c print(result) # -------------------------- # 记录执行后的物理内存 mem_after = process.memory_info().rss # 转换为MB单位输出 print(f"内存占用变化: {(mem_after - mem_before) / 1024 / 1024:.2f} MB")
4. CPU资源测量
CPU消耗可以通过对比执行前后的CPU时间(用户态+系统态耗时)来计算:
import psutil process = psutil.Process() # 记录执行前的CPU时间(user是用户态耗时,system是系统态耗时) cpu_times_before = process.cpu_times() # -------------------------- # 你的业务代码 a = 5 b = 6 c = 3 result = (a * b) + c print(result) # -------------------------- cpu_times_after = process.cpu_times() # 计算总CPU耗时 cpu_total_used = (cpu_times_after.user - cpu_times_before.user) + (cpu_times_after.system - cpu_times_before.system) print(f"CPU总耗时: {cpu_total_used:.4f} 秒")
5. 复杂场景:监控内存峰值
如果你的代码是循环、批量处理等内存波动大的场景,可以实时采样记录峰值内存:
import psutil process = psutil.Process() mem_peak = 0 # -------------------------- # 模拟复杂业务代码(循环生成数据) for i in range(10000): # 模拟临时内存占用 temp_data = [i] * 10000 # 实时检查当前内存,更新峰值 current_mem = process.memory_info().rss if current_mem > mem_peak: mem_peak = current_mem # 释放临时数据 del temp_data # -------------------------- print(f"内存峰值: {mem_peak / 1024 / 1024:.2f} MB")
6. psutil与tracemalloc的区别
psutil:监控整个进程的系统级资源使用,适合快速获取整体CPU、内存占用,无需关注内存分配细节。tracemalloc:跟踪Python内部的内存分配,能定位到具体哪行代码分配了内存,适合内存泄漏排查。
内容的提问来源于stack exchange,提问作者Niall
相关产品推荐
相关产品推荐

