【问题标题】:Why can't objgraph capture the growth of np.array()?为什么 objgraph 不能捕捉到 np.array() 的增长?
【发布时间】:2016-04-06 11:04:56
【问题描述】:

查看代码:

import objgraph
import numpy as np
objgraph.show_growth()
j = 20
y = []
for i in range(5):
    for l in range(j):
        y.append(np.array([np.random.randint(500),np.random.randint(500)]))
    print 'i:',i
    objgraph.show_growth()
    print '___'
    #objgraph.show_most_common_types(limit=100)
    j += 1

结果是:

i: 1
wrapper_descriptor 1596 +3
weakref 625 +1
dict 870 +1
method_descriptor 824 +1
i: 2
i: 3
i: 4

对于 2,3 和 4 时期,它没有显示任何增长。但它应该表明 numpy.array 的数量在增长

【问题讨论】:

  • 我的猜测是您需要研究objgraph 文档以了解它可以检测到什么和不能检测到什么。并扫描其他objgraph SO 问题。 numpy 应用程序并不多。

标签: python numpy memory-leaks memory-leak-detector objgraph


【解决方案1】:

我对@9​​87654324@ 不太熟悉,但我认为同样的问题也适用于其他Python 堆分析工具,例如heapy。

Numpy 数组在 C 中实现,并通过内部调用 Py_INCREF 和 Py_DECREF 来实现它们自己的 reference counting。因此,Python garbage collector 不会跟踪它们。 heapy 和(大概)objgraph 之类的工具使用 Python 垃圾收集器来跟踪对对象的引用,因此 numpy 数组对它们是不可见的。

【讨论】:

    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多