numpy 列出ipython和jupyter中的内存使用情况

cx6n0qe3  于 2022-12-26  发布在  Python
关注(0)|答案(1)|浏览(214)

我有几个(几乎10个)GB的内存被ipython内核占用了,我想这是来自大对象(矩阵,列表,numpy数组,...),我可能在一些操作中产生了这些对象,现在我不需要了。
我想列出我定义的所有对象根据它们的内存占用量对它们进行排序。有简单的方法吗?对于某些类型有nbytes方法,但不是所有类型...所以我正在寻找一种通用的方法来列出我创建的所有对象及其内存占用量。

2g32fytz

2g32fytz1#

假设你使用的是ipython或者jupyter,你需要做一些工作来得到你***定义的所有对象的列表。这意味着获取globals()中所有可用的对象,并过滤掉modulesbuiltinsipython 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)

请记住,对于python对象(那些用python内置函数创建的对象),sys.getsizeof是非常精确的。但是对于用第三方库创建的对象,它可能有点不精确。此外,请注意,如果对象是由垃圾收集器管理的,sys.getsizeof会增加额外的垃圾收集器开销。所以,有些东西看起来可能比实际要重一些。
顺便说一句,numpy.nbytes方法可能有点误导,因为它不包括数组对象的非元素属性所消耗的内存。

相关问题