在 Python 中分析内存使用情况

发布日期:2026-07-20 00:42:03   来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 00:42:03  
0

介绍

Python使开发比CC++等语言更快、更简单的方法之一是内存管理。在 Python 中,这很简单,语言会为您处理内存管理。然而,这并不意味着应该忘记内存。优秀的开发人员会希望跟踪其应用程序的内存使用情况,并寻求降低内存使用率。这篇文章将介绍执行此操作的常用工具。

单个物体的尺寸分析

内存分析的最低层涉及查看内存中的单个对象。您可以通过打开 shell 并执行如下操作来执行此操作:

      >>> import sys
    >>> sys.getsizeof({})
    136
    >>> sys.getsizeof([])
    32
    >>> sys.getsizeof(set())
    112
    

上面的代码片段说明了与列表对象相关的开销。列表为 32 个字节(在运行 Python 2.7.3 的 32 位计算机上)。这种分析方式在确定要使用哪种数据类型时很有用。

分析单个函数或方法

分析单个方法或函数的最简单方法是使用开源的memory-profiler包。它与之前写过的line_profiler类似。

您可以通过在任何函数或方法周围放置@profile装饰器并运行python -m memory_profiler myscript 来使用内存分析。脚本退出后,您将看到逐行内存使用情况。

如果您想要分析一段占用大量内存的代码,那么这种方法就非常有用,但如果您不知道内存使用量最大的代码在哪里,这种方法就没什么用了。在这种情况下,首先需要一种更高级的分析方法。

分析整个应用程序

有多种方法可以分析整个 Python 应用程序。您可以使用标准unix工具topps。更特定于 Python 的方法是guppy

古比

要使用guppy,你需要在代码中添加如下内容:

      from guppy import hpy
    h = hpy()
    print h.heap()
    

这将打印出一个按对象类型分组的使用情况表。以下是我一直在开发的PyQt4应用程序示例:

      Partition of a set of 235760 objects. Total size = 19909080 bytes.
    Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
        0  97264  41  8370996  42   8370996  42 str
        1  47430  20  1916788  10  10287784  52 tuple
        2    937   0  1106440   6  11394224  57 dict of PyQt4.QtCore.pyqtWrapperType
        3    646   0  1033648   5  12427872  62 dict of module
        4  11683   5   841176   4  13269048  67 types.CodeType
        5  11684   5   654304   3  13923352  70 function
        6   1200   1   583872   3  14507224  73 dict of type
        7    782   0   566768   3  15073992  76 dict (no owner)
        8   1201   1   536512   3  15610504  78 type
        9   1019   0   499124   3  16109628  81 unicode
    

如果您有一个大型应用程序并且使用相对较少的对象类型,这种类型的分析可能会很困难。

主键

最后,我最近发现,memory-profiler附带了一个名为 mprof 的脚本,它可以显示应用程序生命周期内的内存使用情况。如果你想查看内存是否定期得到清理和释放,这会很有用。

使用 mprof 非常简单,只需在您选择的 shell 中运行mprof run script script_args即可。mprof 将自动创建脚本内存使用情况随时间变化的图表,您可以通过运行mprof plot来查看该图表。请注意,绘图需要matplotlib

以上内容来自杭州电子商务研究院推送

长按或扫码识别 分享给好友

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据