当前位置:  开发笔记 > 编程语言 > 正文

为什么objgraph不能捕获np.array()的增长?

如何解决《为什么objgraph不能捕获np.array()的增长?》经验,为你挑选了1个好方法。

看代码:

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的数量增长



1> ali_m..:

我并不熟悉objgraph,但我认为同样的问题适用于其他Python堆分析工具,如heapy.

Numpy数组在C中实现,并通过内部调用和自己的引用计数.因此,它们不会被Python 垃圾收集器跟踪.类似的工具(可能)使用Python垃圾收集器来跟踪对象的引用,因此numpy数组对它们是不可见的.Py_INCREFPy_DECREFheapyobjgraph

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有