rank vote url
60 383 111 805 url

如何测量脚本运行时间?

我在Project Euler发现好多这样的问题,许多其他地方也问怎么测量执行时间.但是有的时候答案有点kludgey-比如,在__main__中加入时间代码,所以我想在这里分享一下解决方案.


Python自带了一个叫cProfile的分析器.它不仅实现了计算整个时间,而且单独计算每个函数运行时间,并且告诉你这个函数被调用多少次,它可以很容易的确定你要优化的值.

你可以在你的代码里或是交互程序里调用,像下面这样:

  1. import cProfile
  2. cProfile.run('foo()')

更有用的是,你可以在运行脚本的时候用cProfile:

  1. python -m cProfile myscript.py

为了使用更简单,我做了一个小脚本名字叫profile.bat:

  1. python -m cProfile %1

所以我可以这么调用了:

  1. profile euler048.py

下面是结果:

  1. 1007 function calls in 0.061 CPU seconds
  2. Ordered by: standard name
  3. ncalls tottime percall cumtime percall filename:lineno(function)
  4. 1 0.000 0.000 0.061 0.061 <string>:1(<module>)
  5. 1000 0.051 0.000 0.051 0.000 euler048.py:2(<lambda>)
  6. 1 0.005 0.005 0.061 0.061 euler048.py:2(<module>)
  7. 1 0.000 0.000 0.061 0.061 {execfile}
  8. 1 0.002 0.002 0.053 0.053 {map}
  9. 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler objects}
  10. 1 0.000 0.000 0.000 0.000 {range}
  11. 1 0.003 0.003 0.003 0.003 {sum}

注:更新一个来自PyCon2013的视频网址: http://lanyrd.com/2013/pycon/scdywg/