我刚刚安装了 guppy 0.1.10。然后输入 Ipython 2.1.0
from guppy import hpy
hp = hpy()
使控制台崩溃,即 Windows 告诉我,python.exe 刚刚崩溃。有什么解决方法吗?还是有很多替代品?
我对 guppy/heapy 也有同样的问题。Guppy 目前有点过时了。有某种补丁,但我再也找不到了。但是它在 python 2.7 中对我不起作用。由于操作系统架构(64 位!?),您也可能遇到问题。
关于内存分析技术还有其他问题:
我个人认为最有价值的选择是:
计算对象的大小并自行跟踪也很有用。我详细说明了一些代码(最初由https://stackoverflow.com/users/216356/noctis-skytower提供),这些代码是我在 StackOverflow 问题之一(在 python 中大约需要多少内存,80000 个项目的列表会消耗多少内存?)是与 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