当前位置:   article > 正文

Python内存分析工具:memory_profiler_python memory profile

python memory profile

上官网地址:https://pypi.org/project/memory-profiler/

安装: pip install -U memory_profiler

使用:

方式一,直接运行文件,或者命令行运行:

  1. # _*_coding:utf-8_*_
  2. # Python程序内存分析
  3. from memory_profiler import profile
  4. @profile(precision=4) # 统计内存的精度
  5. def my_func():
  6. import time
  7. a = [1, 3, 4, 5]
  8. for i in a:
  9. pass
  10. return time.time()
  11. if __name__ == '__main__':
  12. my_func()

python -m memory_profiler script.py

***命令行运行会丢失精度***


方式二:将结果输出到日志文件

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

方式三:mprof 使用

mprof的可用命令是:

  • mprof run:运行可执行文件,记录内存使用情况
  • mprof plot:绘制一个记录的内存使用情况(默认情况下,最后一个)
  • mprof list:以用户友好的方式列出所有记录的内存使用情况文件。
  • mprof clean:删除所有记录的内存使用情况文件。
  • mprof rm:删除特定记录的内存使用情况文件
  1. mprof run script.py # 运行程序,会生成一个结果数据文件
  2. mprof plot # 根据最后一条数据文件生成图表

跟踪子进程

  1. 方式一:总结所有子进程的内存和父进程的使用情况并跟踪每个子进程
  2. mprof run --include-children <script>
  3. 方式二:独立于主进程跟踪每个子进程,通过索引将子行序列化到输出流。使用多进程
  4. 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 调试器。


应用程序接口

  1. # _*_coding:utf-8_*_
  2. # Python程序内存分析
  3. from memory_profiler import profile, memory_usage
  4. # 使用装饰器,配置精度,将结果输出到日志
  5. # @profile(precision=4, stream=open("memory_profiler.log", "w+"))
  6. def my_func():
  7. import time
  8. a = [1, 3, 4, 5]
  9. for i in a:
  10. pass
  11. return time.time()
  12. # proc=-1 为当前进程
  13. # interval 以1秒的间隔获取timeout时间内的内存使用情况
  14. me = memory_usage(proc=-1, interval=1, timeout=10)
  15. if __name__ == '__main__':
  16. # my_func()
  17. print(me)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/940460
推荐阅读
相关标签
  

闽ICP备14008679号