Python Pycharm:加载大型JSON文件时内存不足



为了加载几个大型(~200MB(JSON文件而执行的以下代码:

def work():
jsons = get_data()
# do something with the jsons
def get_data():
json_files = []
for json_path in file_paths_list:
json_files.append(load_json(json_path))
return json_files
def load_json(json_path):
import json
with open(json_path) as f:
return json.load(f)

以下是 Pycharm 的自定义 VM 选项的外观(最大 30GB 堆大小,RAM 为 32GB(:

# custom PyCharm VM options
-Xms25000m
-Xmx30000m
...
...
...

已应用"使缓存失效/重新启动"的流行建议。

加载 2 个文件(总计 ~400MB(后,在第三次加载期间,抛出异常"内存错误"。

我不明白为什么如果我的堆大小高达 30GB,内存错误仅在 400MB 后抛出?

PyCharm是Python IDE,而不是Python解释器。它使用的内存用于编辑阶段。

由于 python 对象的开销,400MB 的文件很可能会扩展到几 GB 的数据(可能不是 30 个,而是 3 或 4 个(。例:

>>> s = "hello"
>>> import sys
>>> sys.getsizeof(s)
54

基本上 RAM 中对象的大小远高于字符串的大小。

因此,如果你的python解释器是32位解释器,你有2GB或3GB的限制,这可以解释这一点。PyCharm使用64位内核,但无法帮助解释器部分。

升级到 64 位解释器,它能够受益于您的所有 RAM。

您可以使用以下内容检查版本信息和32/64位信息(来自Pycharm(:

>>> import sys
>>> sys.version

例如,我得到:

('3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit '
'(AMD64)]')

如果它显示"32位",我的猜测是正确的。因此,卸载 32 位版本并安装相同版本的 python,但为 64 位,并选择它作为 pycharm 中的当前解释器。

您可能需要在新安装中安装其他模块,因此最好在卸载之前转储需求文本文件,以便能够在新的 64 位版本上执行全局pip install

最新更新