Как найти общий объем памяти, используемый процессом / объектом Python в Windows - PullRequest
3 голосов
/ 11 ноября 2010

У меня есть скрипт, который загружает много данных в память.Я хочу знать, насколько эффективно данные хранятся в памяти.Итак, я хочу знать, сколько памяти было использовано python до загрузки данных и после загрузки данных.Также мне интересно, есть ли способ проверить использование памяти сложным объектом.Допустим, у меня есть словарь с различными типами данных внутри.Как я могу узнать, сколько памяти используется всеми данными в этом словаре.Спасибо, Алекс

Ответы [ 4 ]

5 голосов
/ 11 ноября 2010

Насколько я знаю, нет простого способа узнать, каково потребление памяти для определенного объекта. Это было бы нетривиальным делом, потому что ссылки могли бы быть общими для объектов.

Вот два моих любимых обходных пути:

  1. Используйте диспетчер процессов. Перед запуском сделайте паузу в программе. Запишите память, использованную до выделения. Выделяют. Запишите память после выделения. Это низкотехнологичный метод, но он работает.
  2. В качестве альтернативы вы можете использовать pickle.dump для сериализации вашей структуры данных. Полученный маринад по размеру будет сопоставим (не идентичен!) С пространством, необходимым для хранения структуры данных в памяти Для лучших результатов используйте протокол двоичного рассола.
2 голосов
/ 13 ноября 2010

Чтобы проанализировать, сколько памяти использует объект, вы можете использовать Pympler :

>>> from pympler import asizeof
>>> obj = dict(nested=dict(trash=[1,2,3]))
>>> asizeof.asizeof(obj)
800
>>> asizeof.asizeof(obj['nested'])
480
>>> asizeof.asizeof(obj['nested']['trash'])
160
>>> asizeof.asizeof(obj['nested']['trash'][0])
24
2 голосов
/ 11 ноября 2010

Вы можете взглянуть на пакет guppy , который может предоставить вам информацию о памяти, используемой каждым загруженным объектом.К сожалению, он не работает под python> = 2.6, но это хорошо, если вы используете максимум python 2.5.Его использование действительно просто, просто поместите эти строки в свой код, где вы хотите собрать информацию о памяти:

from guppy import hpy
hp = hpy()
print hp.heap()

, которая даст вам вывод, подобный этому:

Partition of a set of 25961 objects. Total size = 1894868 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  11901  46   775408  41    775408  41 str
     1   6040  23   219964  12    995372  53 tuple
     2   1718   7   116824   6   1112196  59 types.CodeType
     3     73   0   113608   6   1225804  65 dict of module
     4    348   1   107232   6   1333036  70 dict (no owner)
     5    196   1   100192   5   1433228  76 dict of type
     6   1643   6    92008   5   1525236  80 function
     7    209   1    90572   5   1615808  85 type
     8    144   1    76800   4   1692608  89 dict of class
     9    984   4    35424   2   1728032  91 __builtin__.wrapper_descriptor
0 голосов
/ 15 ноября 2010

Альтернативой является то, что вы можете использовать счетчики производительности Windows через pywin32

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