在反面,timeit
通过代码1,000,000次,以与其他代码进行合理的渐近比较。 cProfile
仅运行一次代码,结果中只有3个小数位(0.000),这不足以获取完整图片。
您会得到这样的无用结果:
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 a.py:27(function)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
timeit
的目的是获得函数的吞吐量,这将始终需要代码运行多次才能淡出边缘情况并给出良好的平均值。
另一方面,cProfile
用于对函数堆栈的每个子调用进行概要分析,以使函数内部发生的所有魔术变得神秘。
[timeit
会告诉您必须进行一些优化,而cProfile
会为您指出正确的方向,告诉您堆栈的哪一部分是微不足道的工作。”>