我认为在使用库PyYAML加载.yml file
时出现内存泄漏。
我已经按照接下来的步骤进行了操作:
import yaml
d = yaml.load(open(filename, 'r'))
流程使用的内存(我已将top
或htop
获得)已从60K
增加到160M
,而文件大小较低比1M
。
然后,我完成了下一个命令:
sys.getsizeof(d)
它返回的值低于400K
。
我也尝试将垃圾收集器与gc.collect()
一起使用,但没有发生任何事情。
正如你所看到的,似乎存在内存泄漏,但我不知道是什么产生了它,我也不知道如何释放这些内存。
有什么想法吗?
答案 0 :(得分:0)
您的方法没有显示内存泄漏,它只是表明PyYAML在处理中等大小的YAML文件时会占用大量内存。
如果你愿意:
import yaml
X = 10
for x in range(X):
d = yaml.safe_load(open(filename, 'r'))
程序使用的内存大小会根据您设置X
的内容而改变,然后有理由假设存在内存泄漏。
在我运行的测试中,情况并非如此。只是默认的Loader和SafeLoader占用内存中大约330x的文件大小(基于任意1Mb大小的简单,即没有标签,YAML文件)和CLoader大约145x文件大小。
多次加载YAML数据不会增加,因此load()
会回放它使用的内存,这意味着没有内存泄漏。
这并不是说它看起来像是一个巨大的开销。
(我正在使用safe_load()
,因为PyYAML的文档表明load()
在不受控制的输入文件上不安全。)