51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Python - 性能分析 profile 使用方法

代码性能至关重要,但有时难以弄清性能瓶颈的位置,python的profile包可以解决这个问题并指导提升代码性能。

简介 {#简介}

代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile, cProfilehotshot 等。其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈。Python 标准模块提供三种 profilers:cProfile, profile 以及 hotshot

pycharm 专业版带有 profile 工具,vs code 等其他 ide 的 python 用户就需要自己调用profile了。

性能分析方法 {#性能分析方法}

引入python自带的profilecProfile {#引入python自带的profile或cProfile}

确定需要分析性能的函数 {#确定需要分析性能的函数}

我们分析函数 fun 的性能

性能分析 {#性能分析}

python 脚本中分析 {#python-脚本中分析}
  • 输出
  • 其中输出每列的具体解释如下:

| 参数名称 | 参数信息 | |---------------------------|---------------------------------------------| | ncalls | 表示函数调用的次数 | | tottime | 表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间 | | percall | (第一个 percall)等于 tottime/ncalls | | cumtime | 表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间 | | percall | (第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls | | filename:lineno(function) | 每个函数调用的具体信息 |

  • 保存日志

如果需要将输出以日志的形式保存,只需要在调用的时候加入另外一个参数。

可以在当前文件夹存下日志信息到prof文件中。

命令行分析 {#命令行分析}

如果不想在程序中调用profile库使用,可以在命令行使用命令。

  • 运行命令查看性能分析结果
  • 将性能分析结果保存到result文件
读取prof文件中的分析日志 {#读取prof文件中的分析日志}
  • 可以用 pstats 读取prof文件中的日志

可视化 {#可视化}

比较推荐的是使用 snakeviz可视化代码运行时间

官网:https://jiffyclub.github.io/snakeviz/

  • 安装 snakeviz
  • 在浏览器中可以看到函数时间消耗信息:

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/coding/python/python-profile/python-profile/

赞(0)
未经允许不得转载:工具盒子 » Python - 性能分析 profile 使用方法