web-dev-qa-db-fra.com

Déterminez le temps nécessaire à l'exécution d'un script python

J'ai le code suivant dans un script python:

def fun(): 
  #Code here

fun()

Je veux exécuter ce script et aussi savoir combien de temps il a fallu pour exécuter en quelques minutes. Comment puis-je savoir combien de temps il a fallu pour exécuter ce script? Un exemple serait vraiment apprécié.

124
James
from datetime import datetime
startTime = datetime.now()

#do something

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

#Python 3: 
print(datetime.now() - startTime)
225
Petar Ivanov

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
114
Roy
import time
start = time.time()

fun()

print 'It took', time.time()-start, 'seconds.'
53
Double AA

Ce que je fais habituellement, c'est d'utiliser clock() ou time() de la bibliothèque time. clock mesure le temps d'interprétation, alors que time mesure le temps système. Des avertissements supplémentaires peuvent être trouvés dans le docs .

Par exemple,

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

Ou bien, vous pouvez utiliser timeit. J'utilise souvent l'approche time en raison de la rapidité avec laquelle je peux l'exploiter, mais si vous chronométrez un morceau de code pouvant être isolé, timeit s'avère très utile.

Depuis le timeit docs ,

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, qu'il s'agisse de secondes ou de jours, vous pouvez convertir en timedelta et str it:

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

et cela va imprimer quelque chose de la forme [D day[s], ][H]H:MM:SS[.UUUUUU]. Vous pouvez consulter le timedelta docs .

Enfin, si vous souhaitez réellement profiler votre code, Python rend disponible la bibliothèque de profils également.

14
Darren Yin
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!

14
Malek B.
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))
11
Pavlos Panteliadis

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 que ça marche

>>>fun(input)
output

Bon, ça marche, importez maintenant timeit et configurez une minuterie

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

Maintenant que notre minuterie est configurée, 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) ont été nécessaires pour exécuter cette fonction. S'il s'agit d'une fonction simple, vous pouvez l'augmenter à t.time (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.

10
Rapid