我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python利用memory_profiler实现内存分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python利用memory_profiler实现内存分析

任何编程语言开发的项目代码都是需要考虑内存问题的,有时候当项目体量比较庞大以后若是出现内存泄漏等问题分析起来更是哦力不从心的。

因此,平时建议从开发的每个函数入手尽量编写的标准、规范,不至于造成后期无法修复的BUG,这个python非标准模块memory_profiler值得一看。

使用memory_profiler能分析出每行代码块的内存资源使用情况,有两种方式可以参考,一种是开发完代码块通过命令行的方式执行即可。

另一种则在直接代码块时直接生成内r内存资源情况的日志可以随时查看。

使用python pip的方式安装memory_profiler非标准库,默认使用清华大学的python镜像站。

pip install memory_profiler -i https://pypi.tuna.tsinghua.edu.cn/simple/

开发一个函数func_while,其中运行一个100万次的循环并且在循环中打印每一次循环执行时的时间戳,将内存使用情况保存到日志文件memory.log中。

# Importing the timeit module.
import timeit

# A logging library.
from loguru import logger

# A decorator that will wrap the function and add some code to it.
from memory_profiler import profile


@profile(precision=4, stream=open("memory.log", "w+"))
def func_while():
    """
    It prints the numbers from 0 to 999999.
    """
    begin = timeit.default_timer()
    logger.info("开始循环应用:{0}".format(begin))

    n = 0

    while n < 1000000:
        logger.info('当前时间戳:{0}'.format(timeit.default_timer()))
        n = n + 1

    end = timeit.default_timer()
    logger.info("结束循环应用:{0}".format(end))

    logger.info('循环应用总共用时:{0}'.format(str(end - begin)))

func_while()

# 2022-09-17 22:18:18.767 | INFO     | __main__:func_while:39 - 当前时间戳:1397.349649192
# 2022-09-17 22:18:18.769 | INFO     | __main__:func_while:39 - 当前时间戳:1397.350927206
# 2022-09-17 22:18:18.770 | INFO     | __main__:func_while:39 - 当前时间戳:1397.352256128
# 2022-09-17 22:18:18.771 | INFO     | __main__:func_while:39 - 当前时间戳:1397.353639651
# 2022-09-17 22:18:18.773 | INFO     | __main__:func_while:39 - 当前时间戳:1397.354919308
# 2022-09-17 22:18:18.774 | INFO     | __main__:func_while:43 - 结束循环应用:1397.35619568
# 2022-09-17 22:18:18.775 | INFO     | __main__:func_while:45 - 循环应用总共用时:1394.6941001149999

从上面的运行时间可以看出整个100万次的循环整整跑了23分钟才完成,本身电脑性能不是很好为了测试差点就宕机了。下面是memory.log内存分析的文件中的部分截图。

从结果可以发现在我的while循环这一行下面的代码块整个内存显示-65303MB左右,可以看出整个内存消耗出现非常大的问题,怪不得的应用的主线程直接就卡死了。

在上面的分析中,我们选用的内存统计的精度是保留四位小数,也就是@profile注解的precision属性值的设置是4。

接下来使用第二种方式,也就是直接运行查看效果,或者在命令行执行.py的python文件效果是一样的都会展示出内存的消耗情况,但是这种情况可能会出现内存精度缺失的情况。

为了保险起见,这次我还是直接选用1万次循环来进行测试查看效果,循环次数过多怕把我的操作机直接搞崩溃了!

@profile(precision=4)
def func_while2():
    """
    It prints the numbers from 0 to 9999.
    """
    begin = timeit.default_timer()
    logger.info("开始循环应用:{0}".format(begin))

    n = 0

    while n < 10000:
        logger.info('当前时间戳:{0}'.format(timeit.default_timer()))
        n = n + 1

    end = timeit.default_timer()
    logger.info("结束循环应用:{0}".format(end))

    logger.info('循环应用总共用时:{0}'.format(str(end - begin)))


func_while2()

# 2022-09-17 22:37:38.086 | INFO     | __main__:func_while2:81 - 当前时间戳:15.020861643
# 2022-09-17 22:37:38.087 | INFO     | __main__:func_while2:85 - 结束循环应用:15.022343696
# 2022-09-17 22:37:38.089 | INFO     | __main__:func_while2:87 - 循环应用总共用时:12.908313867
# Filename: C:/the-public/the-public/test013/test7.py
#
# Line #    Mem usage    Increment  Occurrences   Line Contents
# =============================================================
#     73  29.7266 MiB  29.7266 MiB           1   @profile(precision=4)
#     74                                         def func_while2():
#     75  29.7266 MiB   0.0000 MiB           1       begin = timeit.default_timer()
#     76  29.7422 MiB   0.0156 MiB           1       logger.info("开始循环应用:{0}".format(begin))
#     77
#     78  29.7422 MiB   0.0000 MiB           1       n = 0
#     79
#     80  29.8125 MiB   0.0000 MiB       10001       while n < 10000:
#     81  29.8125 MiB   0.0703 MiB       10000           logger.info('当前时间戳:{0}'.format(timeit.default_timer()))
#     82  29.8125 MiB   0.0000 MiB       10000           n = n + 1
#     83
#     84  29.8125 MiB   0.0000 MiB           1       end = timeit.default_timer()
#     85  29.8125 MiB   0.0000 MiB           1       logger.info("结束循环应用:{0}".format(end))
#     86
#     87  29.8125 MiB   0.0000 MiB           1       logger.info('循环应用总共用时:{0}'.format(str(end - begin)))

显然执行1万次循环结果算是正常的,增量只有0.0703 MiB,只用了13秒就执行完成了,可能使用for循环的话效果还要好一些。

到此这篇关于Python利用memory_profiler实现内存分析的两种方法总结的文章就介绍到这了,更多相关Python memory_profiler内存分析内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python利用memory_profiler实现内存分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

利用python实现数据分析

1:文件内容格式为json的数据如何解析import json,os,sys current_dir=os.path.abspath(".")filename=[file for file in os.listdir(current_dir
2022-06-04

android profiler内存分析怎么实现

要在Android Profiler中进行内存分析,可以按照以下步骤进行操作:打开Android Studio,并打开要分析的项目。在Android Studio的工具栏中,点击"Android Profiler"按钮以打开Android
2023-10-24

利用Python实现岗位的分析报告

这篇文章主要为大家详细介绍了如何利用Python实现岗位的分析报告,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-22

Java内存分析利器MAT的使用详解

本篇内容主要讲解“Java内存分析利器MAT的使用详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java内存分析利器MAT的使用详解”吧!dump文件包含的内容:1,全部的对象:类,域,原生
2023-06-17

如何利用S_MEMORY_INSPECTOR分析内存泄漏问题

如何利用S_MEMORY_INSPECTOR分析内存泄漏问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我在批量生成service order时,report运行几个小时后,
2023-06-04

如何利用python实现简单的情感分析

今天小编给大家分享一下如何利用python实现简单的情感分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 数据导入及预处
2023-07-02

怎么用python分析游戏内存数据

要使用Python分析游戏内存数据,你需要了解以下几个步骤:安装所需的模块:首先,你需要安装一些用于分析游戏内存数据的Python模块,如`pywin32`、`psutil`和`struct`。你可以使用pip命令安装这些模块,例如:`pi
2023-10-26

详解LeakCanary分析内存泄露如何实现

这篇文章主要为大家介绍了详解LeakCanary分析内存泄露如何实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

如何利用ChatGPT和Python实现对话历史分析

如何利用ChatGPT和Python实现对话历史分析引言:人工智能的发展给自然语言处理带来了重大突破。OpenAI的ChatGPT模型是一种强大的语言生成模型,能够生成连贯、合理的文本回复。本文将介绍如何使用ChatGPT和Python实现
2023-10-25

如何利用ChatGPT和Python实现情感分析功能

如何利用ChatGPT和Python实现情感分析功能介绍ChatGPTChatGPT是OpenAI于2021年发布的一种基于强化学习的生成式预训练模型,它采用了强大的语言模型来生成连贯的对话。ChatGPT可以用于各种任务,包括情感分析。导
2023-10-24

使用MAT进行JVM内存分析实例

这篇文章主要介绍了使用MAT进行JVM内存分析实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-18

Linux共享内存实现机制的示例分析

这篇文章将为大家详细讲解有关Linux共享内存实现机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux共享内存实现机制的详解内存共享: 两个不同进程A、B共享内存的意思是,同一块物理内存
2023-06-09

如何利用ChatGPT和Python实现用户画像分析功能

如何利用ChatGPT和Python实现用户画像分析功能引言:随着互联网的迅猛发展和普及,人们在网络上留下了大量的个人信息。对于企业来说,了解用户的兴趣和偏好,为其提供个性化的服务,已经成为提高用户黏性和市场竞争力的重要手段之一。本文将介绍
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录