【发布时间】:2014-08-18 18:54:04
【问题描述】:
我想同时打印作用域内所有变量的内存大小。
类似于:
for obj in locals().values():
print sys.getsizeof(obj)
但是在每个值之前都有变量名,所以我可以看到我需要删除哪些变量或将其拆分为批次。
想法?
【问题讨论】:
我想同时打印作用域内所有变量的内存大小。
类似于:
for obj in locals().values():
print sys.getsizeof(obj)
但是在每个值之前都有变量名,所以我可以看到我需要删除哪些变量或将其拆分为批次。
想法?
【问题讨论】:
更多的代码,但在 Python 3 中工作并提供排序的、人类可读的输出:
import sys
def sizeof_fmt(num, suffix='B'):
''' by Fred Cirera, https://stackoverflow.com/a/1094933/1870254, modified'''
for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
if abs(num) < 1024.0:
return "%3.1f %s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f %s%s" % (num, 'Yi', suffix)
for name, size in sorted(((name, sys.getsizeof(value)) for name, value in locals().items()),
key= lambda x: -x[1])[:10]:
print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
示例输出:
umis: 3.6 GiB
barcodes_sorted: 3.6 GiB
barcodes_idx: 3.6 GiB
barcodes: 3.6 GiB
cbcs: 3.6 GiB
reads_per_umi: 1.3 GiB
umis_per_cbc: 59.1 MiB
reads_per_cbc: 59.1 MiB
_40: 12.1 KiB
_: 1.6 KiB
【讨论】:
_40 是什么吗?对我来说,它显示了多个 _\d+ 行。有些似乎与命名变量具有完全相同的大小,有些则没有。
%reset 和 %xdel 魔法从内存中清除大项目"
resource.getrusage 的内存使用量约为 10.9 GB。这是在 Google Colab 中。其余的内存使用情况可能是什么原因?
您可以使用.items() 遍历字典的键和值
from __future__ import print_function # for Python2
import sys
local_vars = list(locals().items())
for var, obj in local_vars:
print(var, sys.getsizeof(obj))
【讨论】:
local_vars = list(locals().items()) 避免RuntimeError。