2014-04-11 6 views
8

Ich habe vor kurzem angefangen, eine Server-Anwendung zu profilieren, an der ich gearbeitet habe, um herauszufinden, wo etwas überschüssige Prozessorzeit ausgegeben wird und nach Möglichkeiten zu suchen, Dinge reibungsloser zu machen.Python cProfile Ergebnisse: zwei Zahlen für ncalls

Insgesamt denke ich, ich habe ein gutes Gefühl mit cProfile und Pstats, aber ich verstehe nicht, wie einige Funktionen zwei Zahlen in der Spalte ncalls auflisten.

Zum Beispiel, warum gibt es in den untenstehenden Ergebnissen zwei Zahlen für alle copy.deepcopy Zeug?

  2892482 function calls (2476782 primitive calls) in 5.952 seconds 

    Ordered by: cumulative time 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     27 0.015 0.001 5.229 0.194 /usr/local/lib/python2.7/twisted/internet/base.py:762(runUntilCurrent) 
     7 0.000 0.000 3.109 0.444 /usr/local/lib/python2.7/twisted/internet/task.py:201(__call__) 
     7 0.000 0.000 3.109 0.444 /usr/local/lib/python2.7/twisted/internet/defer.py:113(maybeDeferred) 
     5 0.000 0.000 2.885 0.577 defs/1sec.def:3690(onesec) 
     5 2.100 0.420 2.885 0.577 defs/1sec.def:87(loop) 
    1523 0.579 0.000 2.105 0.001 defs/cactions.def:2(cActions) 
384463/1724 0.474 0.000 1.039 0.001 /usr/local/lib/python2.7/copy.py:145(deepcopy) 
33208/1804 0.147 0.000 1.018 0.001 /usr/local/lib/python2.7/copy.py:226(_deepcopy_list) 
17328/15780 0.105 0.000 0.959 0.000 /usr/local/lib/python2.7/copy.py:253(_deepcopy_dict) 

Antwort

9

Die kleinere Zahl ist die Anzahl der 'primitiven' oder nicht-rekursiven Aufrufe. Die größere Zahl ist die Gesamtanzahl von Aufrufen einschließlich rekursiver Aufrufe. Da decopy rekursiv implementiert ist, bedeutet das, dass Sie decopy direkt 1724 mal aufgerufen haben, aber dass es sich letztendlich ~ 383k mal aufgerufen hat, um Unterobjekte zu kopieren.

+0

Danke. Das passt zu dem, was ich unter https://docs.python.org/2/library/profile.html#instant-user-s-manual gefunden habe ... Dieser frustrierende Moment, wenn Sie eine Frage stellen und dann die Antwort finden a ein paar Minuten später mit weiteren Graben. Ich konnte nicht auf meinen eigenen Beitrag antworten, da ich nie zuvor auf dieser Seite veröffentlicht habe und unter 10 Wiederholungen habe. –