Гуппи / Хипи на Windows с Python 2.7.6
Я только что установил гуппи 0.1.10. Затем набрав в Ipython 2.1.0
from guppy import hpy
hp = hpy()
вызывает сбой консоли, то есть Windows сообщает мне, что python.exe только что потерпел крах. Есть ли обходной путь? Или тяжелая альтернатива?
1 ответ
У меня были такие же проблемы с гуппи / хипи. Гуппи в настоящее время немного устарела. Есть какой-то патч, но я больше не могу его найти. Однако это не сработало для меня в Python 2.7. У вас также могут возникнуть проблемы из-за дуги ОС (64 бит!?).
Есть и другие вопросы о методах профилирования памяти:
Я лично считаю, что наиболее ценными альтернативами являются:
- https://pypi.python.org/pypi/memory_profiler
- https://launchpad.net/meliae
- http://mg.pov.lt/objgraph/
Полезно также рассчитать размер ваших объектов и отследить его самостоятельно. Я разработал некоторый код (первоначально по Noctis Skytower), который я нашел в одном из вопросов Stackru ( приблизительно, сколько памяти будет занимать список из 80000 элементов в python?) совместим с Python 2.7 (должен работать и в 3):
totalSizeOf = lambda obj: sum(map(sys.getsizeof, explore(obj, set())))
def explore(obj, memo):
loc = id(obj)
if loc not in memo:
memo.add(loc)
yield obj
# Handle instances with slots.
try:
slots = obj.__slots__
except AttributeError:
pass
else:
for name in slots:
try:
attr = getattr(obj, name)
except AttributeError:
pass
else:
#yield from explore(attr, memo)
for bar in explore(attr, memo):
yield bar
# Handle instances with dict.
try:
attrs = obj.__dict__
except AttributeError:
pass
else:
#yield from explore(attrs, memo)
for bar in explore(attrs, memo):
yield bar
# Handle dicts or iterables.
for name in 'keys', 'values', '__iter__':
try:
attr = getattr(obj, name)
except AttributeError:
pass
else:
for item in attr():
#yield from explore(item, memo)
for bar in explore(item, memo):
yield bar