使用Python 2.7.6在Windows上使用Guppy/Heapy

Hei*_*urt 5 python windows heapy guppy

我刚刚安装了孔雀鱼0.1.10.然后输入Ipython 2.1.0

from guppy import hpy
hp = hpy()
Run Code Online (Sandbox Code Playgroud)

使控制台崩溃,即Windows告诉我,python.exe刚刚崩溃.有没有解决方法?还是一个堆积的替代品?

J_Z*_*Zar 3

我对孔雀鱼/重物也有同样的问题。Guppy 目前有点过时了。有某种补丁,但我找不到了。然而它在 python 2.7 中对我不起作用。由于操作系统架构(64 位!?),您也可能会遇到问题。

关于内存分析技术还有其他问题:

我个人认为最有价值的替代方案是:

计算对象的大小并自行跟踪它也很有用。我详细阐述了一些代码(最初由/sf/users/15144951/),我在 StackOverflow 问题之一中找到了这些代码(大约 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
Run Code Online (Sandbox Code Playgroud)