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?
13
A
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)