【问题标题】:How do I measure the memory usage of an object in python?如何测量python中对象的内存使用情况?
【发布时间】:2011-06-28 16:58:25
【问题描述】:

我有一个 python 类 foo 包含:

  • 数据(整数、浮点数)
  • 列表(整数、浮点数和其他对象)
  • 字典(整数、浮点数、其他对象)

假设没有反向引用(循环),有没有一种简单的方法可以测量foo 对象的总内存使用量?

基本上,我正在寻找sys.getsizeof

递归版本

我遇到的一些工具包括:heapy、objgraph 和 gc,但我认为它们中的任何一个都不能胜任这项任务(我可能会对此进行更正)

【问题讨论】:

  • 您的最终目标是什么?一个通用的代码分析器就足够了吗?
  • 我的 python 代码占用了大量内存。排除内存泄漏后,我试图在几个小时内跟踪代码的内存使用情况,以了解内存增加的来源。
  • 根据您的目标(如上),也许查看腌制的大小可以很好地指示内存大小。

标签: python memory-management


【解决方案1】:

试试Pympler,它把自己描述为“用于测量、监控和分析 Python 对象的内存行为的开发工具。”

类似的东西

>>> import pympler
>>> print pympler.asizeof.asizeof(your_object)

过去对我有帮助。

请参阅官方文档中的examples 和有关堆栈溢出的other questions

【讨论】:

    【解决方案2】:

    我不确定您是在尝试获取类型的大小还是实际的复杂对象,但是查看 getsizeof,文档指向了这个强大的递归版本的秘诀:

    http://code.activestate.com/recipes/577504/

    所以我假设没有'stock' python 调用可以做到这一点,否则文档会提到它。

    【讨论】:

    • 你只是在谷歌上搜索“递归版本 sys.getsizeof()”吗? :) 当解决方案如此明显时,我讨厌它!...谢谢,将尝试一下。
    • 好吧,我在 IDLE 中玩了大约五分钟。我从来没有用 python 看过内存的东西,所以这是一个很酷的速成课程,但是,是的,这直接来自官方文档。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 2015-09-29
    • 1970-01-01
    • 2017-01-03
    • 2011-02-27
    • 2012-02-28
    • 2013-10-29
    • 2010-10-08
    相关资源
    最近更新 更多