joa*_*pez 5 python garbage-collection yaml memory-leaks garbage
我认为在加载.yml file库 PyYAML时出现内存泄漏。
我已按照以下步骤操作:
import yaml
d = yaml.load(open(filename, 'r'))
Run Code Online (Sandbox Code Playgroud)
由该方法所使用的存储器(我已经得到它top或htop)从生长60K到160M,而文件的大小是低于1M。
然后,我完成了下一个命令:
sys.getsizeof(d)
Run Code Online (Sandbox Code Playgroud)
并且它返回的值低于400K。
我也尝试将垃圾收集器与 一起使用gc.collect(),但什么也没发生。
如您所见,似乎存在内存泄漏,但我不知道是什么导致了它,也不知道如何释放这么多内存。
任何的想法?
您的方法没有显示内存泄漏,它只是显示 PyYAML 在处理中等大小的 YAML 文件时使用大量内存。
如果你愿意这样做:
import yaml
X = 10
for x in range(X):
d = yaml.safe_load(open(filename, 'r'))
Run Code Online (Sandbox Code Playgroud)
并且程序使用的内存大小会根据您的设置而变化X,那么有理由假设存在内存泄漏。
在我运行的测试中,情况并非如此。只是默认的 Loader 和 SafeLoader 在内存中占用的文件大小约为 330 倍(基于任意 1Mb 大小的简单文件,即无标签的 YAML 文件),而 CLoader 约为该文件大小的 145 倍。
多次加载 YAML 数据不会增加该数据,因此load()会归还其使用的内存,这意味着不存在内存泄漏。
这并不是说它看起来是一个巨大的开销。
(我使用safe_load()PyYAML 的文档表明这load()对于不受控制的输入文件是不安全的)。
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |