Python
自带了几个性能分析的模块:profile
,cProfile
和hotshot
,使用方法基本都差不多,无非模块是纯Python
还是用C
写的。本文介绍cProfile
。
例子
1 2 3 4 5 6 7 8 9 10 |
import time def func1(): sum = 0 for i in range(1000000): sum += i def func2(): time.sleep(10) func1() func2() |
运行
1 |
$ python -m cProfile del.py |
运行结果
结果分析
执行了6
个函数,总共花费了10.138s
,按着运行函数名字排序为结果输出。
运行脚本
1 |
$ python -m cProfile -o del.out del.py |
这里以模块方式直接保存profile
结果,可以进一步分析输出结果,运行
1 |
$ python -c "import pstats; p=pstats.Stats('del.out'); p.print_stats()" |
结果(随机)
可以设置排序方式,例如以花费时间多少排序
1 |
$ python -c "import pstats; p=pstats.Stats('del.out'); p.sort_stats('time').print_stats()" |
sort_stats
支持以下参数:
1 |
calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time |
pstats
模块还支持交互式
分析函数的调用栈可以使用gprof2dot
把调用过程输出成图片。
安装命令如下(Ubuntu 16.04
):
1 2 |
$ sudo apt-get install python graphviz $ sudo pip install gprof2dot |
调用命令如下:
1 |
$ gprof2dot -f pstats del.out | dot -Tpng -o output.png |