Python / YAML返回MemoryError

时间:2016-11-04 12:08:04

标签: python python-2.7 memory yaml pyyaml

我正在尝试使用PyYAML模块加载YAML文件,但是,我得到了一个MemoryError。 文件大小似乎合理,即28 MB。我过去加载了较大的文件而没有任何问题。我使用的是Python27 32bit。有没有人知道发生了什么,也许他们可以建议一个解决方案(我不想在分割yaml文件的道路上)。

以下是我得到的错误:

>> yaml_results_file = yaml.load(open
(parent_folder+yaml_results_file_path+yaml_results_file_name, "r"))

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    yaml_results_file = yaml.load(open(parent_folder+yaml_results_file_path+yaml_results_file_name, "r"))
  File "C:\Python27\lib\site-packages\yaml\__init__.py", line 71, in load
    return loader.get_single_data()
  File "C:\Python27\lib\site-packages\yaml\constructor.py", line 39, in get_single_data
    return self.construct_document(node)
  File "C:\Python27\lib\site-packages\yaml\constructor.py", line 48, in construct_document
    for dummy in generator:
  File "C:\Python27\lib\site-packages\yaml\constructor.py", line 398, in construct_yaml_map
    value = self.construct_mapping(node)
  File "C:\Python27\lib\site-packages\yaml\constructor.py", line 208, in construct_mapping
    return BaseConstructor.construct_mapping(self, node, deep=deep)
  File "C:\Python27\lib\site-packages\yaml\constructor.py", line 127, in construct_mapping
    key = self.construct_object(key_node, deep=deep)
  File "C:\Python27\lib\site-packages\yaml\constructor.py", line 99, in construct_object
    self.constructed_objects[node] = data
MemoryError

1 个答案:

答案 0 :(得分:0)

python YAML 模块以 using excessive amounts of memory 闻名,文件大小超过一百倍。就您而言,28 MB 的文件可能需要 3 GB 到 9 GB 的内存。

一个 32 位进程根本无法分配如此多的内存(地址空间的大小仅为 4 GiB,并且根据您的操作系统,内核可能会保留其中的 1 GiB),因此该模块最终在以下情况下引发异常分配失败。

切换到 64 位会提高基于地址空间的限制,但不会降低实际内存需求。如果您预见解析更大的文件,您可能需要切换解析器或 method of parsing