Finden Sie heraus, wie lange es gedauert hat, bis ein Python-Skript die Ausführung abgeschlossen hat

143

Ich habe den folgenden Code in einem Python-Skript:

def fun(): 
  #Code here

fun()

Ich möchte dieses Skript ausführen und auch herausfinden, wie viel Zeit die Ausführung in Minuten gedauert hat. Wie finde ich heraus, wie lange es gedauert hat, bis dieses Skript ausgeführt wurde? Ein Beispiel wäre sehr dankbar.

James
quelle
5
Erster Treffer bei der Suche nach "Python Function Timing": daniweb.com/software-development/python/code/216610
Piskvor verließ das Gebäude
Sie können auch cProfile verwenden . Gibt Ihnen die Möglichkeit, jede Funktion einzeln
Adam Rosenthal

Antworten:

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

#do something

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

#Python 3: 
print(datetime.now() - startTime)
Petar Ivanov
quelle
5
Neu in Python, arbeitet in 3.6.1. Zu Ihrer Information datetime hat kein now-Attribut mehr.
WizzleWuzzle
5
@WizzleWuzzle datetime.now()funktioniert, wenn Sie dies tun from datetime import datetime, nicht nur import datetime(nur in Python 3.6.4 bestätigt).
Paul Wicking
130

Führen Sie das Skript über die Befehlszeile unter Linux oder UNIX aus? In diesem Fall könnten Sie einfach verwenden

time ./script.py
Roy
quelle
2
time -p ./script.py -pFlagge für die Pipeline
Joy
1
und womit hilft uns die Pipeline?
ak3191
Zeit python myScript.py für Windows Die Ausgabe erfolgt in Sekunden: 38.509970903396606 real 0m38.792s Benutzer 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.')
Doppelte AA
quelle
5
Die letzte Zeile sollte wahrscheinlich print('It took {0:0.1f} seconds'.format(time.time() - start))in Python 3.x gelesen werden .
Chris Mueller
3
@ ChrisMueller Ich habe in Python2.7 gearbeitet. Ich werde den Kommentar hier hinterlassen, damit die Leute beide Versionen sehen können.
Double AA
15

Was ich normalerweise mache, ist clock()oder time()aus der timeBibliothek. clockmisst die Dolmetscherzeit, während timedie Systemzeit gemessen wird. Weitere Vorsichtsmaßnahmen finden Sie in den Dokumenten .

Beispielsweise,

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

Oder alternativ können Sie verwenden timeit. Ich benutze den timeAnsatz oft, weil ich ihn so schnell herausholen kann, aber wenn Sie einen isolierbaren Code planen, ist dies timeitpraktisch.

Aus den 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()

Um dann in Minuten zu konvertieren, können Sie einfach durch 60 teilen. Wenn Sie die Skriptlaufzeit in einem leicht lesbaren Format wünschen, egal ob es sich um Sekunden oder Tage handelt, können Sie in a konvertieren timedeltaund stres:

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

und das wird etwas von dem Formular ausdrucken [D day[s], ][H]H:MM:SS[.UUUUUU]. Sie können die timedelta-Dokumente auschecken .

Und schließlich, wenn Sie tatsächlich Ihren Code profilieren möchten, stellt Python auch die Profilbibliothek zur Verfügung .

Darren Yin
quelle
15
import time 

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

Der vorherige Code funktioniert bei mir ohne Probleme!

Malek B.
quelle
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
quelle
Der Ausdruck für 50 Sekunden ist "0: 0: 50"
htzfun
10

Verwenden Sie das Timeit-Modul. Es ist sehr leicht. Führen Sie Ihre Datei example.py so aus, dass sie in der Python-Shell aktiv ist. Sie sollten nun in der Lage sein, Ihre Funktion in der Shell aufzurufen. Probieren Sie es aus, um zu überprüfen, ob es funktioniert

>>>fun(input)
output

Gut, das funktioniert, importiere jetzt timeit und richte einen Timer ein

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

Jetzt haben wir unseren Timer eingerichtet und können sehen, wie lange es dauert

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

Und los geht's, es wird Ihnen sagen, wie viele Sekunden (oder weniger) es gedauert hat, um diese Funktion auszuführen. Wenn es sich um eine einfache Funktion handelt, können Sie sie auf t.timeit (Zahl = 1000) (oder eine beliebige Zahl!) Erhöhen und dann die Antwort durch die Zahl teilen, um den Durchschnitt zu erhalten.

Ich hoffe das hilft.

Schnell
quelle
0

Verwenden Sie die Pakete time und datetime.

Wenn jemand dieses Skript ausführen möchte und auch herausfinden möchte, wie viel Zeit die Ausführung in Minuten gedauert hat

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))

Der obige Code funktioniert für mich. Ich hoffe das hilft.

Thrinadhn
quelle