невозможно очистить большие объемы данных из памяти - PullRequest
0 голосов
/ 12 мая 2019

Я загружаю много данных в python 2.7.15rc1, что почти заполняет всю память, которая есть у меня в компьютере. Я пытался удалить это из памяти, вызывая del или используя gc, и это было мое окончательное решение, переместив все в main, поскольку, насколько я знаю, функция должна очищаться после себя.

if __name__ == "__main__":
    main(args)
    gc.collect()
    print("sleeping")
    time.sleep(120)
    subprocess.call(["ls"])

К сожалению, на самом деле я сталкиваюсь с тем, что когда я нажимаю sleep, используемая память остается прежней. Это вызывает у меня проблемы, потому что после этого я хочу вызвать subprocess, что не удается, потому что он не может выделить достаточно памяти (насколько я знаю, subprocess пытается выделить то же количество, которое уже выделено, или что-то еще вот так).

Кто-нибудь знает, что здесь происходит и что я могу с этим сделать?

1 Ответ

1 голос
/ 12 мая 2019

Поскольку Python является языком для сборки мусора, у нас нет никаких твердых гарантий, если вызов del или использование gc.collect() немедленно удалит всю память обратно в основной процесс, который станет доступным для следующих операций.

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

import multiprocessing

def dfprocessing_func(data):
    # Execute task's code
    return df

p = multiprocessing.Pool(1)
df = p.map(dfprocessing_func, [data])[0]
p.terminate()
p.join()

На основании Андрей Никишаев ~ Почему Python не освобождает память при удалении большого объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...