在Python cProfile中,调用计数和原始调用计数有什么区别?

时间:2013-04-04 16:15:00

标签: python profiling

当我使用pstats显示分析数据时,第一列是每个函数的调用次数。

但是,当我对数据进行排序时,我可以选择callsncallspcalls个键。文档说callsncalls调用次数,当pcalls原始调用次数时。按callsncalls排序是一样的吗?与pcalls有什么不同?

1 个答案:

答案 0 :(得分:13)

http://docs.python.org/2/library/profile.html#module-cProfile

  

我们定义原语意味着调用不是通过递归引起的。

     

...当函数没有递归时,这两个值是相同的

callsncalls排序是相同的。


  

当第一列中有两个数字时(例如,43/3),则后者是原始调用的数量,前者是实际的调用数。请注意,当函数没有递归时,这两个值是相同的,只有单个数字   印刷:

In [43]: def a(i):
   ....:     if i == 0:
   ....:         return
   ....:     a(i-1)
   ....:


In [54]: %prun a(0)
  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       1    0.000    0.000    0.000    0.000 <ipython-input-43-25b7f3d268b8>:1(a)


In [55]: %prun a(1)
  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     2/1    0.000    0.000    0.000    0.000 <ipython-input-43-25b7f3d268b8>:1(a)


In [56]: %prun a(3)
  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     4/1    0.000    0.000    0.000    0.000 <ipython-input-43-25b7f3d268b8>:1(a)