如何使用rv_continuous生成随机变量时修复scipy.stats中的内存泄漏?

时间:2016-12-10 12:00:05

标签: python memory-leaks scipy

以下最小示例似乎遭受内存泄漏(使用SciPy verison 0.17.0测试)

import resource
from scipy.stats import rv_continuous

class Rv(rv_continuous):

    def __init__(self, x):
        rv_continuous.__init__(self, a=0, b=1)
        self.x = x

    def _pdf(self, y):
        return 1


def call_rv(x):
    rv = Rv(x)
    # if the line below is commented out, memory usage stays constant
    s = rv.rvs()

    return 1

for k in range(10000):
    x = call_rv(k)
    if k%1000==0:
        mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
        print 'Memory usage: %s (kb)' % mem

我不明白是什么导致我的例子中的泄漏。值得注意的是,当随机变量生成s = rv.rvs()被注释掉时,不会发生泄漏。

使用rv_continuous和随机变量生成时,如何避免内存泄漏?

1 个答案:

答案 0 :(得分:1)

这不是内存泄漏,最终会将内存返回给操作系统。

72863

在循环中创建一个新实例。不要这样做,你的记忆消耗将得到控制。 如果要生成N个变量,请创建一次实例,然后执行rv = Rv(x)