目录
在运行代码时,我们常常想要知道代码运行内存占用情况。很多情况下我们想知道是不是自己哪个循环写的太繁琐了,或者是在哪一步可以用更小的内存来实现等。所以需要我们对程序整体、某一部分代码、某一变量运行内存使用有更直观的了解。
在本地运行代码如PyCharm和远程运行代码如VScode中都是如何查看内存使用情况的?
内存分析器Memory Profiler
这是一个python模块,用于监控进程的内存消耗以及对python程序的内存消耗进行逐行分析。它是一个纯 python 模块,依赖于psutil模块。
pip 安装:pip install -U memory_profiler
对象
sys.getsizeof()——以字节为单位返回对象的大小。
sys.getsizeof只计算实际使用的内存大小,引用所消耗的内存大小不计算。sys.getsizeof只能作为计算内存大小的参考~
代码及结果
- import sys
- a = [0,1,2,3,4]*2
- memory_a = sys.getsizeof(a)
- print("a内存占用:%i字节"%memory_a)
复制代码a内存占用:144字节
函数
如果想要对某一函数做性能分析,在需要做性能分析的函数前面加装饰器 @profile
代码及结果
- from memory_profiler import profile
- import time
- @profile # 在需要做性能分析的函数前面加装饰器 @profile
- def my_func1(c):
- a = [1] * (10 ** c)
- b = [2] * (2 * 10 ** 7)
- time.sleep(5)
- del b
- del a
- print("+++++++++")
- def my_func2():
- p = [0,1,2,3,4,5]
- P = p*2
- print(P)
- if __name__ == '__main__':
- c=6
- my_func1(c)
- my_func2()
复制代码+++++++++
Filename: E:/平时笔记/test/memory_test.py
- Line Mem usage Increment Occurrences Line Contents
- 4 36.4 MiB 36.4 MiB 1 @profile # 在需要做性能分析的函数前面加装饰器 @profile
- 5
- 6 def my_func1(c):
- 7 44.1 MiB 7.6 MiB 1 a = [1] * (10 ** c)
- 8 196.7 MiB 152.6 MiB 1 b = [2] * (2 * 10 ** 7)
- 9 196.7 MiB 0.0 MiB 1 time.sleep(5)
- 10 44.1 MiB -152.6 MiB 1 del b
- 11 36.4 MiB -7.6 MiB 1 del a
- 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删除特定记录的内存使用情况文件代码及结果
- import time
- def my_func1(c):
- a = [1] * (10 ** c)
- b = [2] * (2 * 10 ** 7)
- time.sleep(5)
- del b
- del a
- print("+++++++++")
- def my_func2():
- time.sleep(5)
- p = [0,1,2,3,4,5]
- P = p*2
- print(P)
- if __name__ == '__main__':
- c=6
- my_func1(c)
- my_func2()
复制代码 在PyCharm的终端(Terminal)输入:+++++++++
[0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
python查看内存使用
- import psutil
- import os
-
- info = psutil.virtual_memory()
- print(u'内存使用:',psutil.Process(os.getpid()).memory_info().rss)
- print(u'总内存:',info.total)
- print(u'内存占比:',info.percent)
- print(u'cpu个数:',psutil.cpu_count())
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |