2016-05-17 2 views
1

Как Python занимается распределением памяти? Есть ли что-то релевантное в распределении памяти, которое я, как разработчик, должен будет подумать при создании большого приложения с использованием Python, или я должен доверять Python, чтобы управлять этим наиболее оптимальным способом?Как питон справляется с распределением памяти?

+1

[Read the docs] (https://docs.python.org/3/c-api/memory.html) – CoryKramer

+0

Документы говорят, что «Менеджер памяти Python» управляет памятью, но не отвечает на вопрос (или, по крайней мере, не в этом разделе) о том, есть ли что-либо, о чем разработчик должен думать. Я думаю, что ключевые вещи будут вокруг того, чтобы убедиться, что избыточные объекты могут быть собраны в мусор и т. Д. Я оставлю ответ на вопрос кому-то, кто знает об этом больше, чем я. – neil

+0

Нейл прав, я читал документы, но я остался не уверен, что я должен что-либо делать сам. –

ответ

3

Python обрабатывает выделение для вас, но есть обстоятельства, при которых вы должны явно освободить место для остановки работы Python или более широкой системы. del x удаляет имя x из любых данных, к которым он присоединен, и если счетчик ссылок на данные становится равным нулю, тогда эти данные имеют право на сбор мусора, когда последует вызов сборщика мусора. Это наверняка произошло до того, как программа завершится неудачно, потому что у нее закончилась нехватка памяти.

Вы можете явно вызвать сборщик мусора (стандартный модуль Python gc). gc.collect() сообщает, что он делает полную коллекцию сразу, если вы не хотите, чтобы это произошло случайно. Есть много других вещей, которые вы можете сделать, чтобы настроить свое поведение на нужды вашей программы. Например, вы можете отключить и повторно включить его вокруг раздела кода, поведение которого в реальном времени важно и чей отбор временных объектов незначительный. См. https://docs.python.org/3/library/gc.html для получения дополнительной информации.

Мусорная сборка объекта может произойти при значительном уборе внешних объектов. Самый простой пример: f=open("some.file" ,"w"). Если вы не используете with или вызываете f.close(), файл остается открытым до завершения программы или до тех пор, пока f не будет собран с мусором.

Вам нужно это знать? Часто не на однопользовательской системе с Gbytes на запас, как на среднем настольном ПК. Наверное, да, если вы пишете код Python для запуска как один элемент коллекции процессов на жестком сервере. Память, которую вы явно не освобождаете, может быть памятью, которую требует какой-то другой процесс.

+0

Спасибо за этот ответ, это было именно то, что я хотел. –

Смежные вопросы