基本性能分析:%prun和%run -p

基本性能分析:%prun和%run -p

代码的性能分析跟代码执行时间密切相关,只不过它关注的是耗费时间的位置。主要的Python性能分析工具是cProfile模块,它不是专为IPython设计的。cProfile在执行一个程序或代码块时,会记录各函数所耗费的时间。

cProfile一般是在命令行上使用的,它将执行整个程序然后输出各函数的执行时间。假设我们有一个简单的脚本:在一个循环中执行一些线性代数计算(计算一个100×100的矩阵的最大本征值绝对值)。

1.png

如果你还不懂NumPy,暂时先别管,后面会讲的。在命令行中输入下列命令即可通过cProfile启动该脚本:

2.png

执行之后,你会发现输出结果是按函数名排序的。这让我们很难发现哪里才是最花时间的地方,因此通常都会再用-s标记指定一个排序规则:

3.png

这里只给出了输出结果中的前15行。只需查看cumtime列即可发现各函数所耗费的总时间。注意,如果一个函数调用了别的函数,计时器是不会停下来重新计时的。cProfile记录的是各函数调用的起始和结束时间,并依此计算总时间。

除命令行用法之外,cProfile还可以编程的方式分析任意代码块的性能。IPython为此提供了一个方便的接口,即%prun命令和带-p选项的%run。%prun的格式跟cProfile差不多,但它分析的是Python语句而不是整个.py文件:

4.png

执行%run -p -s cumulative cprof_example.py也能达到上面那条系统命令行命令一样的效果,但是却无需退出IPython。

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center