Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyYAML内存泄漏_Python_Memory Leaks_Garbage Collection_Yaml_Garbage - Fatal编程技术网

Python PyYAML内存泄漏

Python PyYAML内存泄漏,python,memory-leaks,garbage-collection,yaml,garbage,Python,Memory Leaks,Garbage Collection,Yaml,Garbage,我认为在使用PyYAML库加载.yml文件时内存泄漏 我遵循了以下步骤: import yaml d = yaml.load(open(filename, 'r')) 进程使用的内存(我通过top或htop获得)从60K增加到160M,而文件大小小于1M 然后,我执行了下一个命令: sys.getsizeof(d) 并且返回的值低于400K 我还尝试将垃圾收集器与gc.collect()一起使用,但什么也没有发生 正如您所看到的,似乎存在内存泄漏,但我不知道是什么导致了它,也不知道如何释放这

我认为在使用PyYAML库加载
.yml文件时内存泄漏

我遵循了以下步骤:

import yaml
d = yaml.load(open(filename, 'r'))
进程使用的内存(我通过
top
htop
获得)从
60K
增加到
160M
,而文件大小小于
1M

然后,我执行了下一个命令:

sys.getsizeof(d)
并且返回的值低于
400K

我还尝试将垃圾收集器与
gc.collect()
一起使用,但什么也没有发生

正如您所看到的,似乎存在内存泄漏,但我不知道是什么导致了它,也不知道如何释放这么多内存


有什么想法吗?

您的方法没有显示内存泄漏,它只是显示PyYAML在处理中等大小的YAML文件时使用了大量内存

如果你愿意:

import yaml
X = 10
for x in range(X):
    d = yaml.safe_load(open(filename, 'r'))
程序使用的内存大小将根据您将
X
设置为的内容而变化,因此有理由假设存在内存泄漏

在我运行的测试中,情况并非如此。只是默认加载程序和安全加载程序在内存中的文件大小大约为330倍(基于任意1Mb大小的简单文件,即无标记、YAML文件),而CLoader的文件大小大约为该文件大小的145倍

多次加载YAML数据不会增加这一点,因此
load()
会返回它使用的内存,这意味着没有内存泄漏

这并不是说它看起来像一个巨大的开销

(我使用的是
safe_load()
,因为PyYAML的文档表明
load()
在不受控制的输入文件上是不安全的)