Rho*_*Phi 31 python memory numpy ipython jupyter-notebook
我有一些(几乎十)gb的内存占用了ipython内核.我认为这是来自大型对象(矩阵,列表,numpy数组......)我可能在某些操作中产生,现在我不再需要了.
我想列出我定义的所有对象,并按内存占用情况对它们进行排序.有一个简单的方法吗?对于某些类型,有nbytes方法,但并非所有...所以我正在寻找一种通用的方法来列出我所做的所有对象和它们的内存占用.
Abd*_*dou 48
假设您正在使用ipython或jupyter,您将需要做一些工作来获取您已定义的所有对象的列表.这意味着要提供一切globals()和剔除这些对象modules,builtins,ipython objects,等等.一旦你确定你有这些对象,那么你就可以继续与抢夺它们的大小sys.getsizeof.这可以总结如下:
import sys
# These are the usual ipython objects, including this one you are creating
ipython_vars = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'ipython_vars']
# Get a sorted list of the objects and their sizes
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir() if not x.startswith('_') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True)
Run Code Online (Sandbox Code Playgroud)
请记住,对于python对象(使用python的内置函数创建的对象),sys.getsizeof将非常准确.但是使用第三方库创建的对象可能有点不准确.此外,请注意,sys.getsizeof如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销.所以,有些东西看起来可能比它们实际上要重一些.
作为边注,numpy的.nbytes方法可以是有些令人误解的,因为它不包括由阵列对象的非元件属性消耗的内存.
我希望这有帮助.