Есть ли профилировщик памяти для python2.7? - PullRequest
5 голосов
/ 11 декабря 2010

Мне нужно было проверить статистику памяти объектов, которые я использую в Python.
Я сталкивался с гуппи и pysizer, но они недоступны для python2.7.
Есть ли в Python 2.7 профилировщик памяти?
Если нет, то есть ли способ сделать это сам?

Ответы [ 3 ]

2 голосов
/ 12 декабря 2010

Возможно, вы захотите попробовать адаптировать следующий код для вашей конкретной ситуации и поддерживать ваши типы данных:

import sys


def sizeof(variable):
    def _sizeof(obj, memo):
        address = id(obj)
        if address in memo:
            return 0
        memo.add(address)
        total = sys.getsizeof(obj)
        if obj is None:
            pass
        elif isinstance(obj, (int, float, complex)):
            pass
        elif isinstance(obj, (list, tuple, range)):
            if isinstance(obj, (list, tuple)):
                total += sum(_sizeof(item, memo) for item in obj)
        elif isinstance(obj, str):
            pass
        elif isinstance(obj, (bytes, bytearray, memoryview)):
            if isinstance(obj, memoryview):
                total += _sizeof(obj.obj, memo)
        elif isinstance(obj, (set, frozenset)):
            total += sum(_sizeof(item, memo) for item in obj)
        elif isinstance(obj, dict):
            total += sum(_sizeof(key, memo) + _sizeof(value, memo)
                         for key, value in obj.items())
        elif hasattr(obj, '__slots__'):
            for name in obj.__slots__:
                total += _sizeof(getattr(obj, name, obj), memo)
        elif hasattr(obj, '__dict__'):
            total += _sizeof(obj.__dict__, memo)
        else:
            raise TypeError('could not get size of {!r}'.format(obj))
        return total
    return _sizeof(variable, set())
2 голосов
/ 02 июня 2012

Вот тот, который работает для Python 2.7: Пакет Pympler .

1 голос
/ 11 декабря 2010

Мне не известны профилировщики для Python 2.7 - но посмотрите следующую функцию, которая была добавлена ​​в модуль sys, она может помочь вам сделать это самостоятельно

"Новая функция, getsizeof(), принимает Объект Python и возвращает сумму памяти, используемой объектом, измеряется в байтах. Возврат встроенных объектов правильные результаты; третья вечеринка расширения не могут, но могут определить __sizeof__() метод для возврата размера объекта. "

Вот ссылки на места в онлайн-документах с информацией об этом:

Что нового в Python 2.6
27,1. Модуль sys - Системные параметры и функции

...