175 votes

Test de vitesse Python - Différence de temps - millisecondes

Quelle est la bonne façon de comparer 2 fois en Python afin de tester la vitesse d'une section de code ? J'ai essayé de lire la documentation de l'API. Je ne suis pas sûr de comprendre le truc du timedelta.

Pour l'instant, j'ai ce code :

from datetime import datetime

tstart = datetime.now()
print t1

# code to speed test

tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here

25 votes

Pourquoi n'avez-vous pas imprimé t2-t1 ? Qu'est-ce qui vous a empêché de soustraire ?

34 votes

Devinez, j'ai eu le moment "ça ne peut pas être si facile".

238voto

NickZoic Points 2406

datetime.timedelta est juste la différence entre deux dates ... c'est donc comme une période de temps, en jours / secondes / microsecondes.

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a

>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543

Sachez que c.microseconds ne renvoie que la partie microseconde du timedelta ! Pour le chronométrage, utilisez toujours c.total_seconds() .

Vous pouvez faire toutes sortes de calculs avec datetime.timedelta, par exemple :

>>> c / 10
datetime.timedelta(0, 0, 431654)

Il peut être plus utile de regarder le temps du processeur plutôt que celui de l'horloge murale... cela dépend du système d'exploitation... sous les systèmes de type Unix, consultez la commande 'time'.

1 votes

Toute personne souhaitant obtenir le nombre total de minutes peut utiliser int(c.total_seconds() / 60) dans ce cas

3 votes

El page pour le module timeit indique que le module "évite un certain nombre de pièges courants pour mesurer les temps d'exécution". Cette approche (utilisant datetime.now) est-elle sujette à l'un de ces pièges ?

0 votes

@kuzzooroo oui, c'est vrai ! Il serait préférable d'utiliser timeit au lieu de cette méthode ! Par exemple, j'ai un test dans un grand projet python qui, lorsqu'il est mesuré avec cette méthode, donne un temps d'exécution supposé de 0,25s. En réalité, et selon timeit, le temps d'exécution de cette fonction est de 30 secondes !

83voto

f.cipriani Points 454

Depuis Python 2.7, il y a la méthode timedelta.total_seconds(). Donc, pour obtenir les millisecondes écoulées :

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077

0 votes

Comment l'indiquer avec précision en millisecondes ?

3 votes

@Buffalo - C'est exact

39voto

Darius Bacon Points 9741

Vous pouvez utiliser le module timeit à la place.

24voto

Zitrax Points 3443

Vous pourriez aussi utiliser :

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

Ou vous pouvez utiliser le profileurs python .

3 votes

Lorsque vous utilisez start = time.clock() il imprime DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead .

4voto

sth Points 91594

Vous pourriez simplement imprimer la différence :

print tend - tstart

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