pympler引发TypeError

Dar*_*ina 8 python memory-leaks memory-management python-2.7

在python2.7中,遵循pympler 示例:

from anotherfile import somefunction, somecustomclass
from os import path, listdir
import pandas as pd
import gc
from pympler import tracker, muppy, summary

all_objects = muppy.get_objects()
print 'all objects: ', len(all_objects)
sum1 = summary.summarize(all_objects)
summary.print_(sum1)
Run Code Online (Sandbox Code Playgroud)

这是导入后的第一个代码.它导致了

/usr/bin/python2.7 /myprog.py
all objects:  98755
Traceback (most recent call last):
File "/myprog.py", line 12, in <module>
sum1 = summary.summarize(all_objects)
File "/usr/local/lib/python2.7/dist-packages/pympler/summary.py", line 131, in summarize
total_size[otype] = _getsizeof(o)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 130, in __sizeof__
return super(self, PandasObject).__sizeof__()
TypeError: super() argument 1 must be type, not FrozenList

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

当我尝试初始化SummaryTracker对象时,我得到了同样的错误.

它看起来像是Pympler中的一个错误,但事实上我找不到任何与之相矛盾的事实.根据官方文档,"Pympler完全用Python编写,不依赖于外部库.它已经在Linux,Windows和MacOS X上使用Python 2.5,2.6,2.7,3.1,3.2,3.3,3.4进行了测试." 实际上,在新的python文件中仅使用python 2.7运行以下代码不会产生任何错误并按预期工作:

from pympler import muppy, tracker

tr = tracker.SummaryTracker()
tr.print_diff()
Run Code Online (Sandbox Code Playgroud)

那我错过了什么?

use*_*ica 1

这是Pandas 问题#12924PandasObject.__sizeof__调用的参数顺序错误super。该修复已被撤下,应该会在下一版本中提供。同时,您可以进行编辑pandas/core/base.py以切换参数顺序,或者可以测试错误的存在并使用更正的版本对该方法进行猴子修补。