Quelle est la différence entre tottime et cumtime dans un script python profilé avec cProfile?

Je Profile un script python main.py utiliser cProfile avec la commande suivante:

python -m cProfile -s tottime main.py

La sortie-je obtenir de l'est (seule copie-collé les lignes du haut de la sortie):

10184337 function calls (10181667 primitive calls) in 13.597 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    4.674    4.674   13.598   13.598 main.py:2(<module>)
 2142    2.964    0.001    4.663    0.002 load_aerdat3.py:61(getPacket)
  459    2.381    0.005    2.381    0.005 {waitKey}
1667989    1.170    0.000    1.170    0.000 {numpy.core.multiarray.array}

...

Comment tottime (4.674) être différent de l' cumtime (13.598) pour main.py, puisque cette fonction (c'est à dire. le script entier) n'est appelé qu'une seule fois?

25
demandé sur takahashi 2016-11-03 17:23:59

1 réponses

tottime est le temps total passé à dans la fonction. cumtime est le temps total passé dans la fonction les plus toutes les fonctions appelées par cette fonction.

Les deux valeurs est le même si une fonction n'appelle jamais rien d'autre. Par exemple, {waitKey} ne semble pas invoquer d'autre chose:

  459    2.381    0.005    2.381    0.005 {waitKey}

mais getPacket() appelle d'autres fonctions, donc c'est cumtime colonne comprend le temps pour ceux appels:

 2142    2.964    0.001    4.663    0.002 load_aerdat3.py:61(getPacket)

main.py la ligne couvre tout le code exécuté en dehors des fonctions, le code global; juste les instructions à ce niveau ont pris 4.674 secondes à exécuter, mais parce que ces instructions appelaient les autres fonctions, le temps total cumulé de main.py code plus tous les appels de fonction effectués est de 13.598 secondes.

documentation:

tottime

le temps total passé dans la fonction donnée (et en excluant le temps fait des appels à des sous-fonctions)

[...]

cumtime

est le temps cumulé passé dans cette fonction et dans toutes les sous-fonctions (de l'invocation jusqu'à la sortie). Ce chiffre est exact même pour les fonctions récursives.

35
répondu Martijn Pieters 2016-11-03 14:31:35