Python 中的内存分析器

Fariba Laiq 2024年2月15日
  1. 在 Python 中使用 Memory Profiler 模块监控内存消耗
  2. 在 Python 中使用 guppy 模块监控内存消耗
Python 中的内存分析器

内存分析器是监控代码块内存消耗的模块。

当它们被创建时,它会显示变量对象函数等所占用的内存量。本文将使用 Memory Profilerguppy 来分析 Python 的内存消耗。

在 Python 中使用 Memory Profiler 模块监控内存消耗

Memory Profiler 是 Python 中的一个开源模块,它显示了逐行代码分析和每行代码消耗的内存量。

应该首先使用以下命令安装它:

#Python 3.x
pip install -U memory_profiler

为了分析代码把函数装饰器@profile 放在函数上面,我们需要分析。

# Python 3.x
from memory_profiler import profile


@profile
def myfunc():
    var_a = [1] * (10 ** 6)
    var_b = [2] * (2 * 10 ** 7)
    del var_b
    del var_a


myfunc()

当我们运行代码以显示内存消耗时,我们会将命令行参数 -m memory_profiler 传递给 Python 解释器。

# Python 3.x
python -m memory_profiler filename.py

输出:

Python 中的内存分析器

正如我们所见,每行代码的行号内存使用内存都会增加。

在 Python 中使用 guppy 模块监控内存消耗

guppy 模块简单易用,可用于内存分析。我们将在代码中的某个位置为 guppy 编写代码以监控内存消耗。

应该首先使用以下命令安装它:

#Python 3.x
pip install guppy3

要访问 Python 的 heapy 对象,我们将调用 hpy()。我们将使用 setref() 标记一个参考点来监控内存消耗。

为了打印表格,我们将使用我们创建的堆对象调用 heap() 函数,并获取消耗的总字节数,我们访问堆状态的 size 属性。

# Python 3.x
from guppy import hpy

heap = hpy()
heap.setref()
heap_status1 = heap.heap()
print("Heap Size before creating objects:", heap_status1.size, " bytes\n")
print(heap_status1)
a = []
for i in range(1000):
    a.append(i)
heap_status2 = heap.heap()
print("Heap Size after creating objects : ", heap_status2.size, " bytes\n")
print(heap_status2)

输出:

创建对象后的堆大小

作者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn