Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 Pycharm:加载大型JSON文件时内存不足_Python_Json_Pycharm_Out Of Memory - Fatal编程技术网

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

Python Pycharm:加载大型JSON文件时内存不足,python,json,pycharm,out-of-memory,Python,Json,Pycharm,Out Of Memory,执行以下代码以加载几个大型(约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 lo

执行以下代码以加载几个大型(约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):

“使缓存失效/重新启动”的流行建议已经应用

加载2个文件(总计约400MB)后,在第3次加载期间,引发异常“MemoryError”

我无法理解为什么如果我的堆大小达到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):

例如,我得到:

('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安装。

因为加载到内存中的数据比文本文件本身占用更多空间,因为所有元数据都添加到了对象中。例如,字符串的重量大于其内容。也就是说,30Gb应该就足够了。您还使用命令行python(64位)进行了测试。Pycharm不会执行任何操作。如果你的python版本是32BT,那可能就是问题所在。@Jean-Françoisfaber,但它仍然超过30GB?太多了。请检查底层python解释器的版本。我打赌它是一个32位的版本。没错,我确实有32位,我正试图弄清楚如何升级。只需安装相同版本的python,但使用64位,然后选择它作为pycharm中的当前解释器。为了更安全,请卸载32位版本。如果您只需要安装numpy,则安装非常简单。问题是当你不记得所有你真正需要的软件包时。
>>> import sys
>>> sys.version
('3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit '
 '(AMD64)]')