2111 votes

Comment mesurer le temps écoulé en Python ?

Ce que je veux, c'est commencer à compter le temps quelque part dans mon code, puis obtenir le temps passé, pour mesurer le temps d'exécution de quelques fonctions. Je pense que j'utilise mal le module timeit, mais la documentation est confuse pour moi.

import timeit

start = timeit.timeit()
print("hello")
end = timeit.timeit()
print(end - start)

11 votes

Timeit.timeit() imprime le temps qu'il faut pour exécuter son argument, qui est "pass" par défaut. vous devez utiliser à la place start= time.time() end = time.time()

0 votes

Cela répond-il à votre question ? Mesure du temps écoulé avec le module Time

2529voto

NPE Points 169956

Si vous souhaitez simplement mesurer le temps écoulé entre deux points, vous pouvez utiliser la méthode suivante time.time() :

import time

start = time.time()
print("hello")
end = time.time()
print(end - start)

Cela donne le temps d'exécution en secondes.

Une autre option depuis 3.3 pourrait être d'utiliser perf_counter ou process_time en fonction de vos besoins. Avant la version 3.3, il était recommandé d'utiliser time.clock (merci Amber ). Cependant, elle est actuellement dépréciée :

Sous Unix, renvoie le temps actuel du processeur sous la forme d'un nombre à virgule flottante exprimé en secondes. exprimé en secondes. La précision, et en fait la définition même de la signification de "temps processeur", dépend de celle de la fonction C du même nom.

Sous Windows, cette fonction renvoie les secondes d'horloge murale écoulées depuis le premier appel à cette fonction, sous la forme d'un nombre à virgule flottante, basé sur la fonction fonction Win32 QueryPerformanceCounter() . La résolution est généralement meilleure qu'une microseconde.

Déprécié depuis la version 3.3 : Le comportement de cette fonction dépend de la plate-forme : utiliser perf_counter() ou process_time() au lieu de , en fonction de vos besoins, pour avoir un comportement bien défini.

28 votes

Et pour les microsecondes, utilisez datetime.time()

140 votes

(Pour la mesure de la performance, time.clock() est en fait préférable, car elle ne peut pas être perturbée si l'horloge du système est déréglée, mais .time() accomplit en grande partie le même objectif).

4 votes

Je pense que python -mtimeit est bien meilleur car il s'exécute plus de fois et il est construit comme un moyen natif de mesurer le temps en python.

1182voto

J.F. Sebastian Points 102961

Utilisez timeit.default_timer au lieu de timeit.timeit . Le premier fournit automatiquement la meilleure horloge disponible sur votre plateforme et votre version de Python :

from timeit import default_timer as timer

start = timer()
# ...
end = timer()
print(end - start) # Time in seconds, e.g. 5.38091952400282

timeit.default_timer est assigné à time.time() ou time.clock() selon le système d'exploitation. Sur Python 3.3+ retardateur par défaut est time.perf_counter() sur toutes les plateformes. Voir Python - time.clock() vs. time.time() - précision ?

Voir aussi :

83 votes

Excellente réponse - utilisation timeit produira des résultats beaucoup plus précis puisqu'il tiendra automatiquement compte de facteurs tels que le garbage collection et les différences entre les systèmes d'exploitation.

1 votes

Cela donne le temps en ms ou en secondes ?

3 votes

@KhushbooTiwari dans des fractions de secondes.

248voto

qrawl Points 115

Python 3 uniquement :

Depuis time.clock() est déprécié à partir de Python 3.3 vous voudrez utiliser time.perf_counter() pour une synchronisation à l'échelle du système, ou time.process_time() pour le chronométrage de l'ensemble du processus, tout comme vous aviez l'habitude d'utiliser time.clock() :

import time

t = time.process_time()
#do some stuff
elapsed_time = time.process_time() - t

La nouvelle fonction process_time ne comprendra pas le temps écoulé pendant le sommeil.

46 votes

Utilisez timeit.default_timer au lieu de time.perf_counter . Le premier choisira le timer approprié pour mesurer les performances temporelles, adapté à votre plate-forme et à la version de Python. process_time() fait pas incluent le temps pendant le sommeil et il n'est donc pas approprié de mesurer le temps écoulé.

3 votes

J'utilise l'implémentation suggérée par Pierre, les valeurs sont-elles données en secondes ?

2 votes

Cette réponse semble hors sujet (enfin, la question n'était pas très précise). Il y a deux mesures de "temps" : le temps d'horloge murale entre deux points, ou la consommation en cpu du processus.

108voto

unutbu Points 222216

Étant donné une fonction que vous aimeriez chronométrer,

test.py :

def foo(): 
    # print "hello"   
    return "hello"

le moyen le plus simple d'utiliser timeit est de l'appeler depuis la ligne de commande :

% python -mtimeit -s'import test' 'test.foo()'
1000000 loops, best of 3: 0.254 usec per loop

N'essayez pas d'utiliser time.time ou time.clock (naïvement) pour comparer la vitesse des fonctions. Ils peuvent donner des résultats trompeurs .

PS. Ne mettez pas d'instructions d'impression dans une fonction que vous souhaitez chronométrer, sinon le temps mesuré dépendra de l'instruction d'impression. vitesse du terminal .

32voto

rocksportrocker Points 3031

Utilisation de time.time pour mesurer l'exécution vous donne le temps d'exécution global de vos commandes, y compris le temps d'exécution passé par d'autres processus sur votre ordinateur. C'est le temps que l'utilisateur remarque, mais ce n'est pas bon si vous voulez comparer différents extraits de code / algorithmes / fonctions / ...

Plus d'informations sur timeit :

Si vous voulez avoir un aperçu plus approfondi du profilage :

Mise à jour : J'ai utilisé http://pythonhosted.org/line_profiler/ Je l'ai trouvé très utile et je recommande de l'utiliser à la place du module de profil Python.

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