以下最小示例似乎遭受内存泄漏(使用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
和随机变量生成时,如何避免内存泄漏?
答案 0 :(得分:1)
这不是内存泄漏,最终会将内存返回给操作系统。
72863
在循环中创建一个新实例。不要这样做,你的记忆消耗将得到控制。
如果要生成N个变量,请创建一次实例,然后执行rv = Rv(x)
。