Miałem takie same problemy z gupik/heapy. Guppy jest obecnie nieco przestarzały. Jest jakaś łatka, ale nie mogę jej już znaleźć. Jednak to nie działało dla mnie w python 2.7. Możesz mieć również problemy z powodu łuku systemu operacyjnego (64-bitowe !?).
Istnieją inne pytania na temat technik pamięciowych profilowania:
ja osobiście uważam, że najbardziej wartościowe alternatywy są:
Jest przydatny także do obliczenia wielkości obiektami i śledzić go przez siebie. I opracowane niektóre kodu (pierwotnie przez https://stackoverflow.com/users/216356/noctis-skytower), które znalazłem w jednym z pytań stackoverflow (Approximately how much memory would a list of 80000 items consume in python?) za zgodne z Python 2.7 (powinien działać również w 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