python - 这是内存泄漏吗? ( python + NumPy )

标签 python memory-leaks numpy

下面的代码填满了我所有的内存:

from sys import getsizeof
import numpy

# from http://stackoverflow.com/a/2117379/272471
def getSize(array):
    return getsizeof(array) + len(array) * getsizeof(array[0])


class test():
    def __init__(self):
        pass
    def t(self):
        temp = numpy.zeros([200,100,100])
        A = numpy.zeros([200], dtype = numpy.float64)
        for i in range(200):
            A[i] = numpy.sum( temp[i].diagonal() ) 
        return A

a = test()
memory_usage("before")
c = [a.t() for i in range(100)]
del a
memory_usage("After")
print("Size of c:", float(getSize(c))/1000.0)

输出是:

('>', 'before', 'memory:', 20588, 'KiB  ')
('>', 'After', 'memory:', 1583456, 'KiB  ')
('Size of c:', 8.92)

如果 c 约为 9 KiB,为什么我要使用 ~1.5 GB 的内存?这是内存泄漏吗? (谢谢)

memory_usage 函数发布在 SO 上,为清楚起见,在此处报告:

def memory_usage(text = ''):
    """Memory usage of the current process in kilobytes."""
    status = None
    result = {'peak': 0, 'rss': 0}
    try:
        # This will only work on systems with a /proc file system
        # (like Linux).
        status = open('/proc/self/status')
        for line in status:
            parts = line.split()
            key = parts[0][2:-1].lower()
            if key in result:
                result[key] = int(parts[1])
    finally:
        if status is not None:
            status.close()
    print('>', text, 'memory:', result['rss'], 'KiB  ')
    return result['rss']

最佳答案

diagonal() 的实现未能减少引用计数器。此问题之前已修复,但 the change没有进入 1.7.0。

升级到1.7.1解决问题! release notes包含各种有用的标识符,特别是 issue 2969 .

该解决方案由 Sebastian Berg 和 Charles Harris 在 NumPy mailing list 上提供.

关于python - 这是内存泄漏吗? ( python + NumPy ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085197/

相关文章:

python - 如何使用 python.logging 模块列出所有现有的记录器

python - 找不到语言 json 的内核 - 原子上的氢

开罗链接导致内存泄漏

android - java.lang.reflect.ArtMethod 对象在 Android 的内存中泄漏

ruby - 如何处理 RMagick 在 Ruby 中的内存泄漏?

Python - 曲线拟合产生不正确的拟合

python - 在 openshift 上的 Bottle.py 应用程序中加载静态文件

python - 在 numpy 中高效创建数组

python - 如何在 Python 中求解非线性方程组?

python - 快速读取Python中的列分隔文本数据