Python性能优化之火焰图

性能优化首先要知道程序的性能瓶颈在哪里,python已经提供了profile工具可以看出哪些函数耗时较长。本文介绍的火焰图会以图的形式给出程序更直观的函数调用及开销,这里将介绍的是Uber开源的python火焰图工具pyflame

首先给出一个直观的火焰图

火焰图示例
可以很形象的看出函数调用耗时情况,横向越宽说明耗时越长,从下往上看,最下面表示程序从开始到结束总的耗时。从下往上是一级级函数的调用情况。

pyflame安装(以ubuntu为例)

对Debian/Ubuntu/Fedora系统支持的比较好,centos6参考

  1. 依赖安装
    1
    $ sudo apt-get install autoconf automake autotools-dev g++ pkg-config python-dev python3-dev libtool make
  1. 编译安装

    1
    2
    3
    ./autogen.sh
    ./configure # Plus any options like --prefix.
    make

    生成的pyflame工具位于src目录下,可以将其放到/usr/local/bin目录下

火焰图生成工具

火焰图github, 主要使用脚本flamegraph.pl,可以将其放到/usr/local/bin目录下

pyflame使用

1
2
3
4
$ pyflame 12345 # Attach to PID 12345 and profile it for 1 second
$ pyflame -s 5 -r 0.01 768 # Attach to PID 768 and profile it for 5 seconds, sampling every 0.01 seconds
$ pyflame -o prof.txt -t py.test tests/ # Run py.test against tests/, emitting sample data to prof.txt
$ flamegraph.pl prof.txt>prof.svg # 生成图
  • -s 指定pyflame运行时间
  • -r 抽样频率
  • -o 抽样数据输出
  • –abi option to force a particular Python ABI.(uwsgi可能会用到这个选项)