Python Pycharm: не хватает памяти при загрузке больших файлов JSON - PullRequest
0 голосов
/ 14 сентября 2018

Следующий код выполняется для загрузки нескольких больших (~ 200 МБ) файлов 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 (размер кучи до 30 ГБ, объем ОЗУ составляет 32 ГБ):

# custom PyCharm VM options

-Xms25000m
-Xmx30000m
...
...
...

Популярная рекомендация для «Invalidate Caches / Restart» уже применена.

После загрузки 2 файлов (всего ~ 400 МБ), во время 3-го, выдается исключение «MemoryError».

Я не могу понять, почему, если у меня размер кучи до 30 ГБ, ошибка памяти генерируется только после 400 МБ?

Спасибо,

1 Ответ

0 голосов
/ 14 сентября 2018

PyCharm - это Python IDE, а не интерпретатор Python. Используемая память предназначена для фазы редактирования.

400 МБ файлов могут расширяться до нескольких гигабайт данных (возможно, не 30, а 3 или 4) из-за накладных расходов объектов Python. Пример:

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

в основном размер объекта в оперативной памяти гораздо больше, чем размер строки.

Так что, если ваш интерпретатор Python является 32-битным, у вас есть ограничение в 2 ГБ или 3 ГБ, что может объяснить это. PyCharm использует 64-битное ядро, но не может помочь с частью интерпретатора.

Обновление до 64-битного интерпретатора, который может использовать всю вашу оперативную память.

Вы можете проверить информацию о версии и 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.

Возможно, вам потребуется установить дополнительные модули в новой установке, поэтому лучше перед удалением удалить дамп текстового файла , чтобы иметь возможность выполнить глобальный pip install в новой 64-битной версии.

...