使用PyYAML时发生内存泄漏

5

我认为在使用PyYAML库加载.yml文件时出现了内存泄漏问题。

我已经按照以下步骤进行操作:

import yaml
d = yaml.load(open(filename, 'r'))

该进程使用的内存(使用tophtop获取)已从60K增长到160M,而文件大小低于1M

接下来,我执行了以下命令:

sys.getsizeof(d)

而且它返回的值低于400K

我还尝试使用垃圾收集器gc.collect(),但没有任何效果。

如您所见,似乎存在内存泄漏,但我不知道是什么导致了这种情况,也不知道如何释放这些内存。

有任何想法吗?

1个回答

2
你的方法并没有显示出内存泄漏,只是说明在处理中等大小的YAML文件时,PyYAML使用了大量的内存。
如果你执行以下操作:
import yaml
X = 10
for x in range(X):
    d = yaml.safe_load(open(filename, 'r'))

如果程序使用的内存大小取决于你设置的X,那么有理由认为存在内存泄漏。但在我运行的测试中,并非如此。只是默认的Loader和SafeLoader占用了大约330倍的内存(基于任意1MB大小的简单YAML文件,即不含标签),而CLoader占用了约145倍的文件大小的内存。加载多次YAML数据并不会增加内存占用,因此load()会释放其使用的内存,这意味着不存在内存泄漏。但这并不意味着它看起来像是巨大的开销。(我正在使用safe_load(),因为PyYAML的文档表明load()对于不受控制的输入文件不是安全的)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接