<p>Python包含一个名为<a href="https://docs.python.org/3/library/profile.html#module-cProfile" rel="noreferrer">cProfile</a>的分析器。它不仅给出了总的运行时间,还分别给出了每个函数的时间,并告诉您每个函数被调用了多少次,从而很容易确定应该在哪里进行优化。</p>
<p>您可以从代码内部或从解释器调用它,如下所示:</p>
<pre><code>import cProfile
cProfile.run('foo()')
</code></pre>
<p>更有用的是,您可以在运行脚本时调用cProfile:</p>
<pre><code>python -m cProfile myscript.py
</code></pre>
<p>为了更简单,我制作了一个名为“profile.bat”的小批处理文件:</p>
<pre><code>python -m cProfile %1
</code></pre>
<p>所以我要做的就是跑:</p>
<pre><code>profile euler048.py
</code></pre>
<p>我明白了:</p>
<pre class="lang-none prettyprint-override"><code>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}
</code></pre>
<p>编辑:更新了PyCon 2013中一个好的视频资源的链接,标题为
<a href="https://web.archive.org/web/20170318204046/http://lanyrd.com/2013/pycon/scdywg/" rel="noreferrer"><strong><em>Python Profiling</em></strong></a><br/>
<a href="https://www.youtube.com/watch?v=QJwVYlDzAXs" rel="noreferrer">Also via YouTube</a>。</p>