上官网地址:https://pypi.org/project/memory-profiler/
安装: pip install -U memory_profiler
使用:
方式一,直接运行文件,或者命令行运行:
# _*_coding:utf-8_*_
# Python程序内存分析
from memory_profiler import profile
@profile(precision=4) # 统计内存的精度
def my_func():
import time
a = [1, 3, 4, 5]
for i in a:
pass
return time.time()
if __name__ == '__main__':
my_func()
python -m memory_profiler script.py
***命令行运行会丢失精度***
方式二:将结果输出到日志文件
# _*_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>
设置调试器断点
可以根据使用的内存量设置断点。也就是说,您可以指定一个阈值,一旦程序使用的内存超过阈值中指定的内存,它将停止执行并运行到 pdb 调试器中。要使用它,您必须使用@profile装饰上一节中完成的函数,然后使用选项-m memory_profiler --pdb-mmem=X运行您的脚本,其中 X 是一个数字,表示以 MB 为单位的内存阈值. 例如:
$ python -m memory_profiler --pdb-mmem=100 my_script.py
一旦代码在装饰函数中使用超过 100 MB,将运行my_script.py并进入 pdb 调试器。
应用程序接口
# _*_coding:utf-8_*_
# Python程序内存分析
from memory_profiler import profile, memory_usage
# 使用装饰器,配置精度,将结果输出到日志
# @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()
# proc=-1 为当前进程
# interval 以1秒的间隔获取timeout时间内的内存使用情况
me = memory_usage(proc=-1, interval=1, timeout=10)
if __name__ == '__main__':
# my_func()
print(me)