python - psutil 提供资源以外的其他结果
问题描述
我想检查我的 python 代码的内存消耗,因此在代码中添加了以下行:
import resource
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
作为替代方案,我也尝试过这个:
import psutil
process = psutil.Process(os.getpid())
print(process.memory_info().rss) # in bytes
但是,我得到了不同的结果,例如来自资源的 866 480 和来自 psutil 的 730 689 536。当然,正如您所看到的,在第一种情况下是千字节,在第二种情况下是字节,但除此之外它也有所不同。
阅读文档,我仍然不明白导致差异的原因,因此输入会很有价值。
解决方案
TLDR:resource.getrusage 有时会忽略 Python 已从内存中删除对象
内存分析器中有一个错误(当时正在使用 resource.getrusage)。在这篇博文中,描述了内存测量的不同方法。我引用:
“这种方法 [resource.getrusage] 比基于 psutil 的方法快几倍 [...] 这种方法的问题是它报告的结果似乎在某些情况下略有不同。值得注意的是,当对象时它似乎有所不同最近已从 python 解释器中解放出来。在以下示例中,孤立数组由 python 解释器解放,psutil 可以正确看到,但资源不能正确看到..."