81 votes

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

Je suis en train de profiler un script python main.py utilisant cProfile avec la commande suivante:

 python -m cProfile -s tottime main.py
 

Le résultat obtenu est (copier-coller uniquement les lignes du haut du résultat):

 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 le tottime (4.674) peut-il être différent du cumtime (13.598) pour main.py , puisque cette fonction (c'est-à-dire le script complet) n'est appelée qu'une fois ?

104voto

Martijn Pieters Points 271458

tottime est le temps total passé dans la seule fonction. cumtime est le temps total passé dans la fonction en plus de toutes les fonctions que cette fonction appelée.

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() des appels autres fonctions, il est donc cumtime colonne comprend le moment de ces appels:

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

L' main.py ligne couvre l'ensemble du code d'exécution à l'extérieur de fonctions, le code mondial; seulement les états, à ce niveau, a pris 4.674 secondes à s'exécuter, mais parce que ces déclarations appelé à d'autres fonctions, le total cumulé des temps de l' main.py code , en plus de tous les appels de fonction fait est 13.598 secondes.

À partir de la documentation:

tottime
pour 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 le présent et toutes subfunctions (à partir de l'invocation jusqu'à la sortie). Ce chiffre est précis, même pour des fonctions récursives.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X