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.


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)

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

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

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 .


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!


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

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.