Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2017 20:00:17

alexander4
Зарегистрирован: 2017-01-17
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Профайлинг памяти

Подскажите как можно посмотреть какие конкретно объекты выжирают много памяти?
Нашёл profiler memory, но им можно детально посмотреть только сколько жрет памяти функция, а мне нужно глобально по всей программе (не из 1 модуля). Максимум, что нашёл это guppy, который показывает сколько памяти съедает тот или иной тип, а нужно найти конкретный объект, который забыли почистить.

Офлайн

#2 Фев. 5, 2017 00:14:03

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Профайлинг памяти

Вообще тема обширная, достаточно глянуть на SO
Я вот сходу подумал как то так:

 import ctypes
import gc
from sys import get_size_of
def get_obj_by_id(_id):
     return ctypes.cast(_id, ctypes.py_object).value
res = sorted( ( (get_size_of(x), id(x)) for x in gc.get_objects()), key = lambda x: x[0], reverse = True)
Зная id объекта можно получить сам объект. Но как я понимаю Вам бы хотелось увидеть имя переменной соответствующей этому объекту, а вот с этим возникнут сложности. В качестве обходных путей можно пройтись по locals() и globals() и сравнивать id объектов…



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Фев. 5, 2017 10:48:12

alexander4
Зарегистрирован: 2017-01-17
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Профайлинг памяти

Спасибо за быстрый ответ. Буду пробовать)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version