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

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

Jusqu'à présent, 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
97
demandé sur BuddyJoe 2009-04-20 03:08:27

12 réponses

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

>>> 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 microsecondes du timedelta! À des fins de synchronisation, utilisez toujours c.total_seconds().

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

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

Il pourrait être plus utile de regarder le temps CPU au lieu du temps wallclock cependant ... c'est dépendant du système d'exploitation cependant ... sous Unix-like systèmes, consultez la commande' time'.

142
répondu NickZoic 2014-11-09 19:33:19

Depuis Python 2.7, il y a le timedelta.méthode 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
42
répondu f.cipriani 2014-07-02 16:11:18

Vous pouvez utiliser le module timeit à la place.

34
répondu Darius Bacon 2009-04-20 00:18:10

Vous pouvez également utiliser:

import time

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

Ou vous pouvez utiliser les profileurs python .

19
répondu Zitrax 2009-04-19 23:38:06

Je sais que c'est tard, mais j'aime vraiment utiliser:

start = time.time()

##### your timed code here ... #####

print "Process time: " + (time.time() - start)

time.time() vous donne quelques secondes depuis l'époque. Parce que c'est une norme de temps en secondes, vous pouvez simplement soustraire l'heure de début de la fin pour obtenir le temps d'exécution (en secondes). time.clock() est bon pour l'analyse comparative, mais je l'ai trouvé un peu inutile si vous voulez savoir combien de temps votre processus a pris. Par exemple, il est beaucoup plus intuitif de dire "mon processus prend 10 Secondes" que de dire " mon processus prend 10 unités d'horloge du processeur "

>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05

Dans le premier exemple ci-dessus, on vous montre un temps de 0,05 pour le temps.horloge () vs 0.06377 pour le temps.temps ()

>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472

Dans le deuxième exemple, le temps du processeur indique " 0 " même si le processus a dormi pendant une seconde. time.time() affiche correctement un peu plus de 1 seconde.

8
répondu mgoldwasser 2016-06-24 14:14:44

Vous pouvez simplement imprimer la différence:

print tend - tstart
4
répondu sth 2009-04-19 23:16:09

Le code suivant doit afficher l'heure detla...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart
2
répondu killy971 2009-04-19 23:17:51

Temps.time () / datetime est bon pour une utilisation rapide, mais n'est pas toujours précis à 100%. Pour cette raison, j'aime utiliser l'un des profileurs STD lib (en particulier hotshot) pour savoir quoi faire.

2
répondu nilamo 2009-04-19 23:19:26

Vous pouvez regarder dans les modulesprofile . Vous obtiendrez une meilleure lecture de l'endroit où vos ralentissements sont, et une grande partie de votre travail sera entièrement automatisé.

2
répondu Stefan Kendall 2009-04-19 23:41:17

Voici une fonction personnalisée qui imite les Matlab/Octave de tic toc fonctions.

Exemple d'utilisation:

time_var = time_me(); # get a variable with the current timestamp

... run operation ...

time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')

Fonction :

def time_me(*arg):
    if len(arg) != 0: 
        elapsedTime = time.time() - arg[0];
        #print(elapsedTime);
        hours = math.floor(elapsedTime / (60*60))
        elapsedTime = elapsedTime - hours * (60*60);
        minutes = math.floor(elapsedTime / 60)
        elapsedTime = elapsedTime - minutes * (60);
        seconds = math.floor(elapsedTime);
        elapsedTime = elapsedTime - seconds;
        ms = elapsedTime * 1000;
        if(hours != 0):
            print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds)) 
        elif(minutes != 0):
            print ("%d minutes %d seconds" % (minutes, seconds))
        else :
            print ("%d seconds %f ms" % (seconds, ms))
    else:
        #print ('does not exist. here you go.');
        return time.time()
1
répondu Ulad Kasach 2016-10-20 17:54:51

Je ne suis pas un programmeur Python, mais je sais comment utiliser Google et voici ce que j'ai trouvé: vous utilisez l'opérateur" -". Pour compléter votre code:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

En outre, il semble que vous pouvez utiliser la fonction strftime() pour formater le calcul de timespan afin de rendre le temps mais vous rend heureux.

0
répondu Mike C. 2009-04-19 23:17:18

Vous pouvez utiliser timeit comme ceci pour tester un script nommé module.py

$ python -mtimeit -s 'import module'
0
répondu Dhiraj Thakur 2012-09-27 08:41:52