Python程序运行内存的查看

打印 上一主题 下一主题

主题 621|帖子 621|积分 1863

目录

在运行代码时,我们常常想要知道代码运行内存占用情况。很多情况下我们想知道是不是自己哪个循环写的太繁琐了,或者是在哪一步可以用更小的内存来实现等。所以需要我们对程序整体、某一部分代码、某一变量运行内存使用有更直观的了解。
在本地运行代码如PyCharm和远程运行代码如VScode中都是如何查看内存使用情况的?
内存分析器Memory Profiler

这是一个python模块,用于监控进程的内存消耗以及对python程序的内存消耗进行逐行分析。它是一个纯 python 模块,依赖于psutil模块。
pip 安装:pip install -U memory_profiler
对象

sys.getsizeof()——以字节为单位返回对象的大小。
sys.getsizeof只计算实际使用的内存大小,引用所消耗的内存大小不计算。sys.getsizeof只能作为计算内存大小的参考~
代码及结果
  1. import sys
  2. a = [0,1,2,3,4]*2
  3. memory_a = sys.getsizeof(a)
  4. print("a内存占用:%i字节"%memory_a)
复制代码
a内存占用:144字节
函数

如果想要对某一函数做性能分析,在需要做性能分析的函数前面加装饰器 @profile
代码及结果
  1. from memory_profiler import profile
  2. import time
  3. @profile # 在需要做性能分析的函数前面加装饰器 @profile
  4. def my_func1(c):
  5.     a = [1] * (10 ** c)
  6.     b = [2] * (2 * 10 ** 7)
  7.     time.sleep(5)
  8.     del b
  9.     del a
  10.     print("+++++++++")
  11. def my_func2():
  12.     p = [0,1,2,3,4,5]
  13.     P = p*2
  14.     print(P)
  15. if __name__ == '__main__':
  16.     c=6
  17.     my_func1(c)
  18.     my_func2()
复制代码
+++++++++
Filename: E:/平时笔记/test/memory_test.py
  1. Line   Mem usage   Increment  Occurrences   Line Contents
  2. 4     36.4 MiB     36.4 MiB           1   @profile # 在需要做性能分析的函数前面加装饰器 @profile
  3. 5                                         
  4. 6                                         def my_func1(c):
  5. 7     44.1 MiB      7.6 MiB           1       a = [1] * (10 ** c)
  6. 8    196.7 MiB    152.6 MiB           1       b = [2] * (2 * 10 ** 7)
  7. 9    196.7 MiB      0.0 MiB           1       time.sleep(5)
  8. 10     44.1 MiB   -152.6 MiB           1       del b
  9. 11     36.4 MiB     -7.6 MiB           1       del a
  10. 12     36.4 MiB      0.0 MiB           1       print("+++++++++")
复制代码
[0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
如果想要将函数性能分析的结果保存到文件方便查看,可直接用
@profile(precision=4, stream=open("memory_profiler.log", "w+"))
结果解读

列名含义Mem usage内存占用情况Increment执行该行代码后新增的内存Occurences执行次数Line Contents行内容程序整体基于时间的内存使用

mprof使用

命令含义mprof run运行可执行文件,记录内存使用情况mprof plot绘制一个记录的内存使用情况(默认情况下,最后一个)mprof list以用户友好的方式列出所有记录的内存使用情况文件mprof clean删除所有记录的内存使用情况文件mprof rm删除特定记录的内存使用情况文件代码及结果
  1. import time
  2. def my_func1(c):
  3.     a = [1] * (10 ** c)
  4.     b = [2] * (2 * 10 ** 7)
  5.     time.sleep(5)
  6.     del b
  7.     del a
  8.     print("+++++++++")
  9. def my_func2():
  10.     time.sleep(5)
  11.     p = [0,1,2,3,4,5]
  12.     P = p*2
  13.     print(P)
  14. if __name__ == '__main__':
  15.     c=6
  16.     my_func1(c)
  17.     my_func2()
复制代码
在PyCharm的终端(Terminal)输入:
  1. mprof run memory_test.py
复制代码
+++++++++
[0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
  1. mprof plot
复制代码

python查看内存使用
  1. import psutil
  2. import os
  3. info = psutil.virtual_memory()
  4. print(u'内存使用:',psutil.Process(os.getpid()).memory_info().rss)
  5. print(u'总内存:',info.total)
  6. print(u'内存占比:',info.percent)
  7. print(u'cpu个数:',psutil.cpu_count())
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表