2013-04-04 9 views
13

Wenn ich Profilerstellungsdaten unter Verwendung pstats anzeigen, ist die erste Spalte die Anzahl der Aufrufe für jede Funktion. Wenn ich Daten sortiere, habe ich die Wahl zwischen calls, ncalls und pcalls Schlüsseln. Die Dokumentation sagt, dass calls und ncalls sind Anruf zählen, wenn pcalls ist primitive Rufzahl. Ist das Sortieren nach calls oder ncalls dasselbe? Was ist anders mit pcalls?In Python cProfile, was ist der Unterschied zwischen Anzahl der Anrufe und primitiven Anrufen?

Antwort

13

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

Wir definieren primitiv zu verstehen, dass der Anruf nicht über Rekursion induziert wurde.

..., wenn die Funktion nicht rekursiv, diese beiden Werte sind die gleichen

Sortierung nach calls oder ncalls gleich ist.


Wenn es zwei Zahlen in der ersten Spalte (beispielsweise 43/3), dann ist die letztere ist die Anzahl der primitiven Anrufe, und die erstere ist die tatsächliche Anzahl der Anrufe. Beachten Sie, dass, wenn die Funktion nicht rekursiv, diese beiden Werte gleich sind, und nur die einzige Figur ist gedruckt:

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) 
Verwandte Themen