Quel est le meilleur à utiliser pour le chronométrage en Python? time.clock () ou time.time ()? Lequel offre plus de précision?
par exemple:
start = time.clock()
... do something
elapsed = (time.clock() - start)
contre.
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
est déconseillée et il est recommandé d'utiliserperf_counter()
ou à laprocess_time()
place.timeit.default_timer()
pour mesurer les performances (il est affecté à time.time () ou time.clock () selon le système d'exploitation) .time.clock
ettime.process_time
, mais les processus enfants ne le sont pas. Voir également cette discussion sur la précision (bien sûr, varie selon le système).Réponses:
Depuis 3.3, time.clock () est obsolète , et il est suggéré d'utiliser à la place time.process_time () ou time.perf_counter () .
Auparavant en 2.7, selon les documents du module de temps :
De plus, il existe le module timeit pour comparer les extraits de code.
la source
time.clock()
dépendait de la plate-forme, ettime.process_time()
ne l'est pas. C'est la raison pour laquelle atime.clock()
été déconseillé.La réponse courte est: la plupart du temps, ce
time.clock()
sera mieux. Cependant, si vous chronométrez du matériel (par exemple un algorithme que vous mettez dans le GPU), alorstime.clock()
vous vous débarrasserez de ce temps ettime.time()
c'est la seule solution qui reste.Remarque: quelle que soit la méthode utilisée, le timing dépendra de facteurs que vous ne pouvez pas contrôler (quand le processus changera-t-il, à quelle fréquence, ...), c'est pire avec
time.time()
mais existe aussi avectime.clock()
, donc vous ne devriez jamais exécuter un seul test de timing, mais toujours exécuter une série de tests et regarder la moyenne / variance des temps.la source
D' autres ont répondu Re:
time.time()
vstime.clock()
.Cependant, si vous chronométrez l'exécution d'un bloc de code à des fins d'analyse comparative / de profilage, vous devriez jeter un œil au
timeit
module .la source
timeit.default_timer
est attribué àtime.time()
ou entime.clock()
fonction du système d'exploitation. Sur Python 3.3+default_timer
esttime.perf_counter()
sur toutes les plateformes.Une chose à garder à l'esprit: la modification de l'heure du système affecte
time.time()
mais pastime.clock()
.J'avais besoin de contrôler certaines exécutions de tests automatiques. Si une étape du scénario de test prenait plus d'un certain temps, ce TC était interrompu pour passer à la suivante.
Mais parfois, une étape était nécessaire pour modifier l'heure système (pour vérifier le module de planification de l'application en cours de test), donc après avoir réglé l'heure système quelques heures à l'avenir, le délai d'expiration TC a expiré et le scénario de test a été abandonné. J'ai dû passer de
time.time()
àtime.clock()
pour gérer cela correctement.la source
clock()
-> nombre à virgule flottanteRenvoie le temps CPU ou temps réel depuis le début du processus ou depuis le premier appel à
clock()
. Cela a autant de précision que les enregistrements du système.time()
-> nombre à virgule flottanteRenvoie l'heure actuelle en secondes depuis l'époque. Des fractions de seconde peuvent être présentes si l'horloge système les fournit.
time()
Est généralement plus précis, car les systèmes d'exploitation ne stockent pas le temps d'exécution du processus avec la précision qu'ils stockent l'heure du système (c'est-à-dire l'heure réelle)la source
Cela dépend de ce qui vous intéresse. Si vous voulez dire WALL TIME (comme dans, l'heure sur l'horloge de votre mur), time.clock () ne fournit AUCUNE précision car il peut gérer le temps CPU.
la source
time.clock()
sur des serveurs Linux et les chiffres que j'ai obtenus n'étaient certainement pas des secondestime()
a une meilleure précision queclock()
sur Linux.clock()
n'a qu'une précision inférieure à 10 ms. Alorstime()
donne la précision du préfet. Mon test est sur CentOS 6.4 , python 2.6using clock():
la source
La différence est très spécifique à la plate-forme.
horloge () est très différente sur Windows que sur Linux, par exemple.
Pour le genre d'exemples que vous décrivez, vous préférez probablement le module "timeit" à la place.
la source
clock
est"very different"
?Comme d' autres l' ont noté
time.clock()
est dépréciée en faveurtime.perf_counter()
outime.process_time()
, mais Python 3.7 introduit le calendrier de résolution nanoseconde avectime.perf_counter_ns()
,time.process_time_ns()
ettime.time_ns()
, ainsi que 3 autres fonctions.Ces 6 nouvelles fonctions de résolution en nansecondes sont détaillées dans le PEP 564 :
Comme d'autres l'ont également noté, utilisez le
timeit
module pour chronométrer les fonctions et les petits extraits de code.la source
Sous Unix time.clock () mesure la quantité de temps CPU qui a été utilisée par le processus actuel, donc ce n'est pas bon pour mesurer le temps écoulé à un moment donné dans le passé. Sous Windows, il mesurera les secondes de l'horloge murale écoulées depuis le premier appel à la fonction. Sur l'un ou l'autre système, time.time () renverra les secondes écoulées depuis l'époque.
Si vous écrivez du code destiné uniquement à Windows, l'un ou l'autre fonctionnera (bien que vous utiliserez les deux différemment - aucune soustraction n'est nécessaire pour time.clock ()). Si cela va s'exécuter sur un système Unix ou si vous voulez que le code soit garanti portable, vous voudrez utiliser time.time ().
la source
Réponse courte: utilisez time.clock () pour le chronométrage en Python.
Sur les systèmes * nix, clock () renvoie le temps processeur sous la forme d'un nombre à virgule flottante, exprimé en secondes. Sous Windows, il renvoie les secondes écoulées depuis le premier appel à cette fonction, sous forme de nombre à virgule flottante.
time () renvoie les secondes depuis l'époque, en UTC, sous forme de nombre à virgule flottante. Il n'y a aucune garantie que vous obtiendrez une meilleure précision que 1 seconde (même si time () renvoie un nombre à virgule flottante). Notez également que si l'horloge système a été réglée entre deux appels à cette fonction, le deuxième appel de fonction renverra une valeur inférieure.
la source
Au meilleur de ma compréhension, time.clock () a autant de précision que votre système le permet.
la source
J'utilise ce code pour comparer 2 méthodes. Mon système d'exploitation est Windows 8, processeur core i5, RAM 4 Go
production:
temps () = 0,0993799996376
horloge () = 0,0993572257367
la source
Bonne réponse: ils ont tous deux la même longueur d'une fraction.
Mais qui plus vite si
subject
esttime
?Un petit cas de test :
Je ne travaille pas dans un laboratoire suisse mais j'ai testé ..
Sur la base de cette question:
time.clock()
est mieux quetime.time()
Modifier:
time.clock()
est un compteur interne donc ne peut pas être utilisé à l'extérieur, a des limitationsmax 32BIT FLOAT
, ne peut pas continuer à compter s'il ne stocke pas les premières / dernières valeurs. Impossible de fusionner un autre compteur ...la source
time.clock()
a été supprimé dans Python 3.8 car il avait un comportement dépendant de la plateforme :Sous Windows , cette fonction renvoie les secondes de l'horloge murale écoulées depuis le premier appel à cette fonction, sous forme de nombre à virgule flottante
Alors, quelle fonction choisir à la place?
Temps processeur : c'est la durée pendant laquelle ce processus spécifique passe activement à s'exécuter sur le CPU. La mise en veille, l'attente d'une demande Web ou le moment où seuls d'autres processus sont exécutés n'y contribueront pas.
time.process_time()
Horloge murale : il s'agit du temps qui s'est écoulé "sur une horloge suspendue au mur", c'est-à-dire en dehors du temps réel.
Utilisation
time.perf_counter()
time.time()
mesure également l'heure de l'horloge murale mais peut être réinitialisée, vous pouvez donc remonter dans le tempstime.monotonic()
ne peut pas être réinitialisé (monotone = ne fait que progresser) mais a une précision inférieure àtime.perf_counter()
la source
Comparaison du résultat du test entre Ubuntu Linux et Windows 7.
Sur Ubuntu
Sous Windows 7
la source