Som*_*ist 3 python size memory-leaks memory-management introspection
我有一些代码,我从我自己的包运行,程序使用了比它应有的更多的内存(60GB).如何在当前命名空间中打印所有对象的大小(以字节为单位),以便尝试计算出使用此内存的位置?
我尝试了类似的东西
from pympler import asizeof
for objname in dir():
print(asizeof.asizeof(thing)/1024) # print size in kb
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为它只打印包含命名空间中对象名称的字符串的大小.有没有办法获取对象引用命名空间中的所有内容以便使用此方法,还是有更好的方法来计算使用内存的内容?
如果您更喜欢使用标准库并且还希望它们按大小排序:
import sys
objects=[]
for name,obj in locals().items():
objects.append([name,sys.getsizeof(obj)])
sorted(objects,key=lambda x: x[1],reverse=True)
Run Code Online (Sandbox Code Playgroud)
dir()仅返回本地范围中存在的名称.使用该locals()函数将本地范围作为字典:
for obj in locals().values():
print(asizeof.asizeof(obj) / 1024)
Run Code Online (Sandbox Code Playgroud)
注意,在函数之外,locals()与映射相同globals().
如果asizeof()在词典中,您想要将其过滤掉:
for name, obj in locals().items():
if name != 'asizeof':
print(asizeof.asizeof(obj) / 1024)
Run Code Online (Sandbox Code Playgroud)
dir()没有参数在功能上等同于sorted(locals())(本地命名空间的键的排序列表).