如何分析 Python 脚本?
2022-09-05 00:54:49
欧拉项目和其他编码竞赛通常有最长的运行时间,或者人们吹嘘他们的特定解决方案运行的速度有多快。使用Python,有时方法有些笨拙 - 即向中添加计时代码。__main__
分析Python程序运行需要多长时间的好方法是什么?
欧拉项目和其他编码竞赛通常有最长的运行时间,或者人们吹嘘他们的特定解决方案运行的速度有多快。使用Python,有时方法有些笨拙 - 即向中添加计时代码。__main__
分析Python程序运行需要多长时间的好方法是什么?
Python包含一个名为cProfile的分析器。它不仅给出了总运行时间,而且还分别对每个函数进行了计时,并告诉您每个函数被调用的次数,从而可以轻松确定应在何处进行优化。
您可以从代码中调用它,也可以从解释器中调用它,如下所示:
import cProfile
cProfile.run('foo()')
更有用的是,您可以在运行脚本时调用cProfile:
python -m cProfile myscript.py
为了简化它,我制作了一个名为“profile.bat”的小批处理文件:
python -m cProfile %1
所以我所要做的就是运行:
profile euler048.py
我得到这个:
1007 function calls in 0.061 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.061 0.061 <string>:1(<module>)
1000 0.051 0.000 0.051 0.000 euler048.py:2(<lambda>)
1 0.005 0.005 0.061 0.061 euler048.py:2(<module>)
1 0.000 0.000 0.061 0.061 {execfile}
1 0.002 0.002 0.053 0.053 {map}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler objects}
1 0.000 0.000 0.000 0.000 {range}
1 0.003 0.003 0.003 0.003 {sum}
编辑:更新了来自PyCon 2013的一个很好的视频资源的链接,标题为Python Profiling
也通过YouTube。
不久前,我制作了pycallgraph
,它从你的Python代码中生成可视化。编辑:我已经更新了示例以使用3.3,这是撰写本文时的最新版本。
在安装 GraphViz 之后,您可以从命令行运行它:pip install pycallgraph
pycallgraph graphviz -- ./mypythonscript.py
或者,您可以分析代码的特定部分:
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
with PyCallGraph(output=GraphvizOutput()):
code_to_profile()
其中任何一个都会生成一个类似于下图的文件:pycallgraph.png