Découvrez le temps nécessaire à un script python pour terminer l'exécution

143

J'ai le code suivant dans un script python:

def fun(): 
  #Code here

fun()

Je veux exécuter ce script et savoir également combien de temps il a fallu pour s'exécuter en quelques minutes. Comment savoir combien de temps il a fallu à ce script pour s'exécuter? Un exemple serait vraiment apprécié.

James
la source
5
Premier coup sur la recherche de "synchronisation de la fonction python": daniweb.com/software-development/python/code/216610
Piskvor a quitté le bâtiment le
Vous pouvez également utiliser cProfile . Vous donne la possibilité de chronométrer chaque fonction séparément
Adam Rosenthal

Réponses:

263
from datetime import datetime
startTime = datetime.now()

#do something

#Python 2: 
print datetime.now() - startTime 

#Python 3: 
print(datetime.now() - startTime)
Petar Ivanov
la source
5
Nouveau sur Python, fonctionnant en 3.6.1. FYI datetime n'a plus d'attribut now.
WizzleWuzzle
5
@WizzleWuzzle datetime.now()fonctionne si vous le faites from datetime import datetime, pas seulement import datetime(juste confirmé sur Python 3.6.4).
Paul Wicking
130

Exécutez-vous le script à partir de la ligne de commande sous Linux ou UNIX? Dans ce cas, vous pouvez simplement utiliser

time ./script.py
Roy
la source
2
time -p ./script.py -pdrapeau pour pipeline
Joy
1
et qu'est-ce que le pipeline nous aide?
ak3191
time python myScript.py for windows La sortie sera Temps d'exécution en secondes: 38.509970903396606 real 0m38.792s user 0m0.015s sys 0m0.046s
Aryashree Pritikrishna
64
import time
start = time.time()

fun()

# python 2
print 'It took', time.time()-start, 'seconds.'

# python 3
print('It took', time.time()-start, 'seconds.')
Double AA
la source
5
La dernière ligne devrait probablement être lue print('It took {0:0.1f} seconds'.format(time.time() - start))en python 3.x.
Chris Mueller
3
@ChrisMueller Je travaillais en python2.7. Je vais cependant laisser le commentaire ici pour que les gens puissent voir les deux versions.
Double AA le
15

Ce que je fais habituellement, c'est utiliser clock()ou time()depuis la timebibliothèque. clockmesure le temps de l'interprète, tandis que le timetemps du système. Des mises en garde supplémentaires peuvent être trouvées dans la documentation .

Par exemple,

def fn():
    st = time()
    dostuff()
    print 'fn took %.2f seconds' % (time() - st)

Ou bien, vous pouvez utiliser timeit. J'utilise souvent l' timeapproche en raison de la rapidité avec laquelle je peux l'exploiter , mais si vous chronométrez un morceau de code isolable, c'est timeitpratique.

D'après les documents de timeit ,

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()

Ensuite, pour convertir en minutes, vous pouvez simplement diviser par 60. Si vous voulez que l'exécution du script soit dans un format facilement lisible, que ce soit en secondes ou en jours, vous pouvez le convertir en un timedeltaet stril:

runtime = time() - st
print 'runtime:', timedelta(seconds=runtime)

et que imprimerons sur quelque chose de la forme [D day[s], ][H]H:MM:SS[.UUUUUU]. Vous pouvez consulter les documents de timedelta .

Et enfin, si vous recherchez réellement le profilage de votre code, Python rend également disponible la bibliothèque de profils .

Darren Yin
la source
15
import time 

startTime = time.time()
# Your code here !
print ('The script took {0} second !'.format(time.time() - startTime))

Le code précédent fonctionne pour moi sans problème!

Malek B.
la source
14
import sys
import timeit

start = timeit.default_timer()

#do some nice things...

stop = timeit.default_timer()
total_time = stop - start

# output running time in a nice format.
mins, secs = divmod(total_time, 60)
hours, mins = divmod(mins, 60)

sys.stdout.write("Total running time: %d:%d:%d.\n" % (hours, mins, secs))
Pavlos Panteliadis
la source
l'impression pendant 50 secondes est "0: 0: 50"
htzfun
10

Utilisez le module timeit. C'est très facile. Exécutez votre fichier example.py pour qu'il soit actif dans le shell Python, vous devriez maintenant pouvoir appeler votre fonction dans le shell. Essayez-le pour vérifier qu'il fonctionne

>>>fun(input)
output

Bien, cela fonctionne, importez maintenant timeit et configurez une minuterie

>>>import timeit
>>>t = timeit.Timer('example.fun(input)','import example')
>>>

Maintenant que nous avons configuré notre minuterie, nous pouvons voir combien de temps cela prend

>>>t.timeit(number=1)
some number here

Et voilà, il vous dira combien de secondes (ou moins) il a fallu pour exécuter cette fonction. Si c'est une fonction simple, vous pouvez l'augmenter à t.timeit (nombre = 1000) (ou n'importe quel nombre!), Puis diviser la réponse par le nombre pour obtenir la moyenne.

J'espère que ça aide.

Rapide
la source
0

utilisez les packages time et datetime.

si quelqu'un veut exécuter ce script et savoir également combien de temps il a fallu pour s'exécuter en quelques minutes

import time
from time import strftime
from datetime import datetime 
from time import gmtime

def start_time_():    
    #import time
    start_time = time.time()
    return(start_time)

def end_time_():
    #import time
    end_time = time.time()
    return(end_time)

def Execution_time(start_time_,end_time_):
   #import time
   #from time import strftime
   #from datetime import datetime 
   #from time import gmtime
   return(strftime("%H:%M:%S",gmtime(int('{:.0f}'.format(float(str((end_time-start_time))))))))

start_time = start_time_()
# your code here #
[i for i in range(0,100000000)]
# your code here #
end_time = end_time_()
print("Execution_time is :", Execution_time(start_time,end_time))

Le code ci-dessus fonctionne pour moi. J'espère que ça aide.

Thrinadhn
la source