2款Python内存检测工具介绍和使用方法

去年自己写过一个程序时,不太确定自己的内存使用量,就想找写工具来打印程序或函数的内存使用量。
这里将上次找到的2个内存检测工具的基本用法记录一下,今后分析Python程序内存使用量时也是需要的。

memory_profiler模块(与psutil一起使用)
注:psutil这模块,我太喜欢了,它实现了很多Linux命令的主要功能,如:ps, top, lsof, netstat, ifconfig, who, df, kill, free 等等。
示例代码(https://github.com/smilejay/python/blob/master/py2014/mem_profile.py):

代码如下:

#!/usr/bin/env python

'''
Created on May 31, 2014

@author: Jay <smile665@gmail.com>
@description: use memory_profiler module for profiling programs/functions.
'''

from memory_profiler import profile
from memory_profiler import memory_usage
import time

@profile
def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a

def cur_python_mem():
    mem_usage = memory_usage(-1, interval=0.2, timeout=1)
    return mem_usage

def f(a, n=100):
    time.sleep(1)
    b = [a] * n
    time.sleep(1)
    return b

if __name__ == '__main__':
    a = my_func()
    print cur_python_mem()
    print ""
    print memory_usage((f, (1,), {'n': int(1e6)}), interval=0.5)

运行上面的代码,输出结果为:


代码如下:

jay@Jay-Air:~/workspace/python.git/py2014 $python mem_profile.py
Filename: mem_profile.py

Line #    Mem usage    Increment   Line Contents
================================================
    15      8.0 MiB      0.0 MiB   @profile
    16                             def my_func():
    17     15.6 MiB      7.6 MiB       a = [1] * (10 ** 6)
    18    168.2 MiB    152.6 MiB       b = [2] * (2 * 10 ** 7)
    19     15.6 MiB   -152.6 MiB       del b
    20     15.6 MiB      0.0 MiB       return a

[15.61328125, 15.6171875, 15.6171875, 15.6171875, 15.6171875]

[15.97265625, 16.00390625, 16.00390625, 17.0546875, 23.63671875, 23.63671875, 23.640625]

Guppy (使用了Heapy)
Guppy is an umbrella package combining Heapy and GSL with support utilities such as the Glue module that keeps things together.
示例代码(https://github.com/smilejay/python/blob/master/py2014/try_guppy.py):

代码如下:

#!/usr/bin/env python

'''
Created on May 31, 2014

@author: Jay <smile665@gmail.com>

@description: just try to use Guppy-PE (useing Heapy) for memory profiling.
'''

from guppy import hpy

a = [8] * (10 ** 6)

h = hpy()
print h.heap()
print h.heap().more
print h.heap().more.more

注意其中,要输出更多信息的.more用法。
运行上面的程序,输出结果为:


代码如下:

jay@Jay-Air:~/workspace/python.git/py2014 $python try_guppy.py
Partition of a set of 26963 objects. Total size = 11557848 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0    177   1  8151560  71   8151560  71 list
     1  12056  45   996840   9   9148400  79 str
     2   5999  22   488232   4   9636632  83 tuple
     3    324   1   283104   2   9919736  86 dict (no owner)
     4     68   0   216416   2  10136152  88 dict of module
     5    199   1   210856   2  10347008  90 dict of type
     6   1646   6   210688   2  10557696  91 types.CodeType
     7   1610   6   193200   2  10750896  93 function
     8    199   1   177008   2  10927904  95 type
     9    124   0   135328   1  11063232  96 dict of class
<91 more rows. Type e.g. '_.more' to view.>
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
    10   1045   4    83600   1  11148456  96 __builtin__.wrapper_descriptor
    11    109   0    69688   1  11218144  97 dict of guppy.etc.Glue.Interface
    12    389   1    34232   0  11252376  97 __builtin__.weakref
    13    427   2    30744   0  11283120  97 types.BuiltinFunctionType
    14    411   2    29592   0  11312712  98 __builtin__.method_descriptor
    15     25   0    26200   0  11338912  98 dict of guppy.etc.Glue.Share
    16    108   0    25056   0  11363968  98 __builtin__.set
    17    818   3    19632   0  11383600  98 int
    18     66   0    18480   0  11402080  98 dict of guppy.etc.Glue.Owner
    19     16   0    17536   0  11419616  99 dict of abc.ABCMeta
<81 more rows. Type e.g. '_.more' to view.>
(后面省略了部分输出)

另外,还有一个叫“PySizer”的也是做memory profiling的,不过没怎么维护了。

(0)

相关推荐

  • python使用cStringIO实现临时内存文件访问的方法

    本文实例讲述了python使用cStringIO实现临时内存文件访问的方法.分享给大家供大家参考.具体分析如下: 如果希望从网络读取文件进行处理,但是又不希望保存文件到硬盘,可以使用cStringIO模块进行处理 res = urllib2.urlopen(pic,timeout=10) f = cStringIO.StringIO(res.read()) f 是一个文件对象, 它和:f = open('c:/1.jpg','rw')  打开的文件一样 可以向操作本地文件一样对内存文件进行读写

  • 使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子

    例子一: Python用WMI模块获取windowns系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 复制代码 代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import wmi import os import sys import platform import time def sys_version():      c = wmi.WMI ()     #获取操作系统

  • 有关wxpython pyqt内存占用问题分析

    一直觉得wxpython占用内存比较多,在工作中写的一些小程序应用,一对比其它的小程序,发现内存相差确实有点大. 测试了下QT框架 复制代码 代码如下: import sys,timefrom PyQt4 import QtCore, QtGui#import wxif __name__ == "__main__":while True:time.sleep(1) 只载入了框架,内存占用就有明显差别.载入wx的时候一般在20M左右,我写的几个应用也差不多是这么多,所以占用内存多的主要是

  • 使用python获取CPU和内存信息的思路与实现(linux系统)

    大家都知道,linux里一切皆为文件,在linux/unix的根目录下,有个/proc目录,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数).与其他文件系统不同,/proc 存在于内存而不是硬盘中.proc 文件系统提供的信息如下: •进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的

  • Python中使用MELIAE分析程序内存占用实例

    写的dht协议搜索的程序,这几天优化了一下发现速度确实快了好多.但是出现了一个新的问题,内存直接飙升,我开了十个爬虫占用内存800m.开始我以为是节点太多了,找了几个小问题修改一下,发现没用.后来就到网上查找python内存分析的工具,查了一点资料发现python有个meliae库操作非常方便,就使用分析了一下,发现不是节点太多的原因0 0,是保存发送的t_id,用来标示返回的消息是那个发出的一个字典过大了. 从分析的结果非常容易的定位了某个对象的数量和大小,非常容易分析.我开始以为是因为好多发

  • python使用内存zipfile对象在内存中打包文件示例

    复制代码 代码如下: import zipfileimport StringIO class InMemoryZip(object):    def __init__(self):        # Create the in-memory file-like object        self.in_memory_zip = StringIO.StringIO() def append(self, filename_in_zip, file_contents):        '''Appe

  • Python深入学习之内存管理

    语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征.这里以Python语言为例子,说明一门动态类型的.面向对象的语言的内存管理方式.  对象的内存使用 赋值语句是语言最常见的功能了.但即使是最简单的赋值语句,也可以很有内涵.Python的赋值语句就很值得研究. a = 1 整数1为一个对象.而a是一个引用.利用赋值语句,引用a指向对象1.Python是动态类型的语言(参考动态类型),对象与引用分离.Pytho

  • Python的内存泄漏及gc模块的使用分析

    一般来说在 Python 中,为了解决内存泄漏问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收. 由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为自己从此过上了好日子,不必再受内存泄漏的骚扰了.但如果仔细查看一下Python文档对 __del__() 函数的描述,就知道这种好日子里也是有阴云的.下面摘抄一点文档内容如下: Some common situations that may prevent the reference count of an object fro

  • 2款Python内存检测工具介绍和使用方法

    去年自己写过一个程序时,不太确定自己的内存使用量,就想找写工具来打印程序或函数的内存使用量.这里将上次找到的2个内存检测工具的基本用法记录一下,今后分析Python程序内存使用量时也是需要的. memory_profiler模块(与psutil一起使用)注:psutil这模块,我太喜欢了,它实现了很多Linux命令的主要功能,如:ps, top, lsof, netstat, ifconfig, who, df, kill, free 等等.示例代码(https://github.com/smi

  • python 邮件检测工具mmpi的使用

    概要介绍 mmpi,是一款使用python实现的开源邮件快速检测工具库,基于community框架设计开发.mmpi支持对邮件头.邮件正文.邮件附件的解析检测,并输出json检测报告. mmpi,代码项目地址:https://github.com/a232319779/mmpi,pypi项目地址https://pypi.org/project/mmpi/ mmpi,邮件快速检测工具库检测逻辑: 支持解析提取邮件头数据,包括收件人.发件人的姓名和邮箱,邮件主题,邮件发送时间,以及邮件原始发送IP.

  • python性能检测工具函数运行内存及运行时间

    目录 1.memory_profiler进程监视 2.timeit 时间使用情况 3.line_profiler行代码运行时间检测 4.heartrate可视化检测工具 前言: python虽然是一门'慢语言',但是也有着比较多的性能检测工具来帮助我们优化程序的运行效率.这里总结了五个比较好的python性能检测工具,包括内存使用.运行时间.执行次数等方面. 首先,来编写一个基础的python函数用于在后面的各种性能测试. def base_func(): for n in range(1000

  • 4款Python 类型检查工具,你选择哪个呢?

    微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,只说它家开源的 VS Code 编辑器,在猿界已经割粉无数,连我们 Python 圈的红人 Kenneth Reitz (多个开源项目的作者,包括 requests.requests-html.responder等)都对它赞不绝口. 如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便

  • Python实现检测文件MD5值的方法示例

    本文实例讲述了Python实现检测文件MD5值的方法.分享给大家供大家参考,具体如下: 前面介绍过Python计算文件md5值的方法,这里分析一下Python检测文件MD5值的另一种实现方法. 概述: MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. 实现代码: #python 检测文件MD5值 #python version 2.6 import hashlib im

  • Python+OpenCV检测灯光亮点的实现方法

    本篇博文分享一篇寻找图像中灯光亮点(图像中最亮点)的教程,例如,检测图像中五个灯光的亮点并标记,项目效果如下所示: 第1步:导入并打开原图像,实现代码如下所示: # import the necessary packages from imutils import contours from skimage import measure import numpy as np import argparse import imutils import cv2 # construct the arg

  • 介绍一款python类型检查工具pyright(推荐)

    近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,只说它家开源的 VS Code 编辑器,在猿界已割粉无数,连我 Python 圈的红人 Kenneth Reitz(多个开源项目的作者,包括 requests.requests-html.responder等)都对它赞不绝口. 如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便

  • python的构建工具setup.py的方法使用示例

    本文介绍了python的构建工具setup.py,分享个大家,具体如下: 一.构建工具setup.py的应用场景 在安装python的相关模块和库时,我们一般使用"pip install  模块名"或者"python setup.py install",前者是在线安装,会安装该包的相关依赖包:后者是下载源码包然后在本地安装,不会安装该包的相关依赖包.所以在安装普通的python包时,利用pip工具相当简单.但是在如下场景下,使用python setup.py ins

  • Python编写检测数据库SA用户的方法

    本文讲述一个用Python写的小程序,用于有注入点的链接,以检测当前数据库用户是否为sa,详细代码如下: # Code by zhaoxiaobu Email: little.bu@hotmail.com #-*- coding: UTF-8 -*- from sys import exit from urllib import urlopen from string import join,strip from re import search def is_sqlable(): sql1="

  • python函数运行内存时间等性能检测工具

    目录 基础测试函数 memory_profiler进程 timeit 时间使用情况 line_profiler行代码检测 heartrate可视化检测 python虽然是一门'慢语言',但是也有着比较多的性能检测工具来帮助我们优化程序的运行效率. 这里总结了五个比较好的python性能检测工具,包括内存使用.运行时间.执行次数等方面. 基础测试函数 首先,来编写一个基础的python函数用于在后面的各种性能测试. def base_func():     for n in range(10000

随机推荐