You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用psutil检测Python内存时嵌套循环内存异常增长问题

为什么用psutil测量Python内存时,嵌套循环里内存看似持续增长?

问题描述

我尝试使用psutil工具测量Python程序的内存使用情况,却发现异常现象:即使未存储或加载任何数据,嵌套for循环中的内存占用仍持续增长。运行以下示例代码:

import os
import psutil
for i in range(10):
    print(i)
    for j in range(5):
        mem_usage = psutil.Process(os.getpid()).memory_info()[0] / 2 ** 20
        print("{}{} MB".format(j,mem_usage))

得到如下输出:

0
0178 MB
1178 MB
2178 MB
3178 MB
4178 MB
1
0178 MB
1178 MB
2178 MB
3178 MB
4178 MB

请问这是什么原因?psutil未实现我预期的功能吗?


回答

哈哈,这个问题其实是个输出格式化的小失误,psutil的工作完全正常,内存根本没有持续增长!

你看你用的格式化字符串是"{}{} MB".format(j,mem_usage),这里把循环变量j和内存数值mem_usage直接拼接在一起了——比如当j=0、mem_usage=178时,输出就变成了0178 MB,看起来像是内存涨到了178MB,下一次j=1就变成1178 MB,仿佛内存跳到了1178MB,但实际上这只是两个值连在一起显示而已,真实的内存一直稳定在178MB左右。

解决方法很简单,只要在格式化字符串里给j和内存数值之间加个分隔符就行,比如空格或者冒号:

import os
import psutil
for i in range(10):
    print(i)
    for j in range(5):
        mem_usage = psutil.Process(os.getpid()).memory_info()[0] / 2 ** 20
        # 用冒号加空格分隔循环变量和内存数值
        print("{}: {} MB".format(j, mem_usage))

修正后的输出会变成这样,你就能清楚看到内存没有变化:

0
0: 178 MB
1: 178 MB
2: 178 MB
3: 178 MB
4: 178 MB
1
0: 178 MB
1: 178 MB
2: 178 MB
3: 178 MB
4: 178 MB

另外补充一句:如果你的程序真存在内存泄漏问题,psutil是能准确捕捉到的,但这个案例里完全是输出格式导致的误会~


内容的提问来源于stack exchange,提问作者Mansumen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:22:04