首页 > 系统相关 >python内存监测工具memory_profiler

python内存监测工具memory_profiler

时间:2023-10-24 20:22:49浏览次数:50  
标签:__ MB python profiler 内存 memory mprof

内存监测工具memory_profiler

目录

memory_profiler是Python的一个第三方库,其功能时基于函数的逐行代码分析工具

memory_profiler 是一个监控进程内存消耗的模块,也可以逐行分析 Python 程序的内存消耗。它是一个依赖 psutil 模块的纯 Python 模块。

安装

pip install -U memory_profiler

参数注解

from memory_profiler import profile


@profile
def my_func():
	a = [1] * (10 ** 6)
	b = [2] * (2 * 10 ** 7)
	del b
	return a
 
if __name__ == '__main__':
	my_func()
Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

部分参数注解:

Mem usage:执行完改行代码后内存的使用情况。
Increment:执行完该行代码,内存增加了多少。
Occurrences:该行被命中多少次。
Line #:代码所在行号。
Line Contents:该行代码的内容。

简单使用

三种使用方式中,前两种是针对逐行的内存使用分析,另外一种针对时间维度的内存使用分析。

使用装饰器,设置显示精度

from memory_profiler import profile

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

if __name__ == "__main__":
    my_func()

    
    
#python -m  memory_profiler    python/test.py
# python  python/test.py
Line #    Mem usage    Increment  Occurrences   Line Contents
=============================================================
     6  27.88672 MiB  27.88672 MiB           1   @profile(precision=5)
     7                                         def my_func():
     8  35.51953 MiB   7.63281 MiB           1       a = [1] * (10 ** 6)
     9 188.10938 MiB 152.58984 MiB           1       b = [2] * (2 * 10 ** 7)
    10  35.51953 MiB -152.58984 MiB           1       del b
    11  35.51953 MiB   0.00000 MiB           1       return a

输出在日志中

# _*_coding:utf-8_*_
# Python程序内存分析
from memory_profiler import profile
 
 
# 使用装饰器,配置精度,将结果输出到日志
@profile(precision=4, stream=open("memory_profiler.log", "w+"))
def my_func():
    import time
    a = [1, 3, 4, 5]
    for i in a:
        pass
    return time.time()
 
 
if __name__ == '__main__':
    my_func()

mprof 使用

时间维度内存分析

使用 mprof 执行程序在时间维度分析进程的内存使用情况。下面介绍了一共有四种情况,分别是:单进程,多进程,记录子进程内存占用,多进程并记录子进程内存占用。

mprof run:运行可执行文件,记录内存使用情况
mprof plot:绘制一个记录的内存使用情况(默认情况下,最后一个)
mprof list:以用户友好的方式列出所有记录的内存使用情况文件。
mprof clean:删除所有记录的内存使用情况文件。
mprof rm:删除特定记录的内存使用情况文件
mprof run script.py   # 运行程序,会生成一个结果数据文件
mprof plot			  # 根据最后一条数据文件生成图表
方式一:总结所有子进程的内存和父进程的使用情况并跟踪每个子进程
mprof run --include-children <script>
 
 
 
方式二:独立于主进程跟踪每个子进程,通过索引将子行序列化到输出流。使用多进程
 
mprof run --multiprocess <script> 

内存监测其他工具

https://blog.csdn.net/lanyang123456/article/details/100860904

参考资料

https://zhuanlan.zhihu.com/p/121003986

https://www.cnblogs.com/kaituorensheng/p/5669861.html

标签:__,MB,python,profiler,内存,memory,mprof
From: https://www.cnblogs.com/tian777/p/17785673.html

相关文章

  • python时间监测工具line_profiler
    时间监测工具line_profiler目录时间监测工具line_profiler安装部分注释使用方法同时显示内部函数参考资料ine_profiler是Python的一个第三方库,其功能时基于函数的逐行代码分析工具。通过该库,可以对目标函数允许分析多个函数)进行时间消耗分析,便于代码调优。安装pipinstallli......
  • python基础语法指南
    输出流输出百分号(1)直接使用参数格式化:{:.2%}{:.2%}:显示小数点后2位print('percent:{:.2%}'.format(42/50))percent:84.00%不显示小数位:{:.0%},即,将2改为0print('percent:{:.0%}'.format(42/50))percent:84%(2)格式化为float,然后处理成%格式:{:.2f}%需要对42/50乘......
  • 【Python】【ChatGPT】本地部署ChatGPT学习记录
    学习一下GPT项目的相关使用和部署 一、GPT4ALL模型Github:https://github.com/nomic-ai/gpt4allGPT4ALL项目部署简易,但是在运行体验上一般,并且是只调用CPU来进行运算,看官方文档介绍在嵌入式上有比较大的优势,但是目前个人对嵌入式方向接触不深,仅在本机部署使用。本机配置(CPU:i5......
  • 【Python 千题 —— 基础篇】进制转换:十进制转二进制
    题目描述题目描述计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。输入描述输入一个十进制数。输出描述程序将输入的十进制数转换为二进制数,并输出其二进制形式。示例示例......
  • 21.4 Python 使用GeoIP2地图定位
    GeoIP2是一种IP地址定位库,它允许开发人员根据IP地址查找有关位置和地理位置的信息。它使用MaxMind公司的IP地址数据库,并提供一个方便的PythonAPI。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬......
  • 基于Python的子进程获取键盘输入
    一概念 众所周知,python中的获取键盘输入,input函数是没办法用在子程序的,这就限制了它的用途。想要在子程序中获取键盘输入。唯有fn=sys.stdin.fileno函数了。二实例解析在主进程中敲写代码fn=sys.stdin.fileno(),然后将获取到的文件描述符fn传入子进程,子进程敲写代码sys......
  • python selenium 利用pyautogui+ActionChains 完美解决我的滑块验证登录问题
    在解决滑块验证的时候不知道什么原因明明是滑块已经对上了,代码执行就是会校验不通过,手动时就可以,中间也做利用ActionChains模块减速滑动轨迹的操作,但仍然不行,后面在执行代码中添加了pyautogui模块使鼠标悬停在屏幕中的某个点而不改变ActionChains鼠标的定位后终于每次都能通过了fro......
  • 21.4 Python 使用GeoIP2地图定位
    GeoIP2是一种IP地址定位库,它允许开发人员根据IP地址查找有关位置和地理位置的信息。它使用MaxMind公司的IP地址数据库,并提供一个方便的PythonAPI。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬......
  • Python数据类型
     数据类型有数值型,布尔型和字符串型一、数值型包括int(整型)、float(浮点型)和complex(复数型)等。1.整型Python3.x支持任意大小的整型数。整型数可以表示成十进制、八进制、十六进制和二进制形式。十进制整型常量:数码为0~9,如-135、57232。八进制整型常量:必须以80或8o开头(第1......
  • python引用相对路径
    文件夹ants/bees文件夹与learn_data.py隶属于同一个目录data_process   所以引用相对路径的方式即为:classMyData(Dataset):def__init__(self,root_dir,label_dir):self.root_dir=root_dir#根目录,即hymenoptera_data/trainself.label_......