R-подобное удаление объекта и освобождение памяти в python? - PullRequest
0 голосов
/ 01 февраля 2019

Я из R, и я не могу понять эту сверхосновную проблему в python.

Скажем, я подгоняю случайный лес в R. Это объект под названием rf.Это занимает память.Если я делаю rm(rf), память освобождается, когда я смотрю на htop или набираю free в оболочке.

Если я нахожусь в python, подхожу к RandomForestRegressor и вызываю его rf, затем del rf, ничего не происходит .

Я могу import gc, а затем gc.collect(), и ничего не происходит

Очевидно, что python слишком крутой, чтобы что-то подобное было легко.Как мне вернуть память?

1 Ответ

0 голосов
/ 01 февраля 2019

Это означает, что у вас есть другая ссылка на него.

Вы можете использовать print(sorted(globals())) и print(sorted(locals())), чтобы вывести список текущих ссылок, если вам нужно отладить это.Если вы знакомы с gc, вы можете использовать gc.get_objects() для просмотра каждого объекта, на который есть ссылка.Используйте del, чтобы удалить ненужные ссылки.Если у вас нет ссылки на объект, Cpython будет автоматически собирать мусор.

Это, по крайней мере, теория ... Потому что используемый вами модуль также может сохранять ссылку, и, поскольку вы сохраняете ссылку на модуль, он не будет собирать мусор.Вы можете полностью удалить ссылки, которые хранятся в модуле (используя introspection ) или del module.Возможно, у вашего объекта есть функция close или другая, которая должна быть выполнена для освобождения ресурсов (может быть, auto-closable ).

Нет необходимости говорить, что хранение ссылок является чем-то модульнымследует избегать.

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