gpt4 book ai didi

Python:每个对象类型(或源代码行)的内存使用统计

转载 作者:IT王子 更新时间:2023-10-28 23:31:43 25 4
gpt4 key购买 nike

我正在使用 Python 进行一些繁重的计算(使用 OpenCV 和 Numpy),最后,我使用了大量的内存(>1GB),因此所有的 refs 都应该消失了,我只有最终结果(不应超过几 MB)。

为了调试它,如果我能以某种方式获得一些统计数据,这些数据会告诉我有多少对象实例属于什么类型,按它们占用的内存总量(每个对象类)排序。

甚至更好:不是每个对象类,而是每个创建对象的源代码行(因此我猜这个信息不可用,除非我在 Python 中激活一些调试,这会使计算太慢,所以我不确定如果有帮助的话)。

我能以某种方式获得一些这样的统计数据吗?或者我该如何调试?


有些人误解了我:我需要知道如何调试内存使用情况。处理/运行时间非常完美。

最佳答案

我认为您正在寻找 python 分析器;

你有一堆你可以使用的,比如 Heapy , profile or cprofile , Pysize ...

使用 Heapy 的示例:

您必须在代码中的某处包含此代码段:

from guppy import hpy
h = hpy()
print h.heap()

它会给你作为输出:

Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 35144 27 2140412 26 2140412 26 str
1 38397 29 1309020 16 3449432 42 tuple
2 530 0 739856 9 4189288 50 dict (no owner)

cprofile 示例:

你可以这样运行它:

python -m cProfile script.py

输出:

         5 function calls in 0.000 CPU seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 myscript.py:1(<module>)
1 0.000 0.000 0.000 0.000 {execfile}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {range}

您也可以使用gc模块知道为什么 python 没有释放你的内存,并要求他使用 gc.collect() 释放内存.

顺便说一句,你看过 numpy ,我认为如果您像您说的那样进行大量计算,则更合适。

关于Python:每个对象类型(或源代码行)的内存使用统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4178116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com