cProfile是python提供的C扩展插件,运行开销小,适合分析长时间运行的程序。写一个简单的例子importcProfilefib=lambdan:1ifn<=2elsefib(n-1)+fib(n-2)deftest():fib(20)cProfile.run("test()")输出:0.005秒内13533次函数调用(5次原始调用)排序方式:标准名称ncallstottimepercallcumtimepercallfilename:lineno(function)10.0000.0000.0050.005:1()13529/10.000050.00050.00050.005cProfile性能测试.py:3()10.0000.0000.0050.005cProfile性能测试.py:5(test)10.0000.0000.0050.005{内置方法builtins.exec}1od0.0000.0000.0000{meth0'_lsprof.Profiler'对象的'禁用'}第一行显示监视了13533个调用。在这些调用中,有5个是原始调用,这意味着调用不是通过递归引发的。下面解释以下标题:ncalls调用tottime指定函数花费的总时间(不包括调用子函数的时间)percall是tottime除以ncallscumtime指定函数及其所有子函数(从调用toRollout)消耗的累计时间。这个数字对于递归函数是准确的。percall是cumtime除以原始调用次数(即函数运行一次的平均时间)的商filename:lineno(function)对于提供相应数据的每个函数如果第一列中有两个数字(例如13529/1),意思是函数递归。第二个值是原始调用次数,第一个是调用总数。而当函数不是递归时,两个值相同,只打印一个数字。