Dowiedz się, ile czasu zajęło wykonanie skryptu w języku Python

143

Mam następujący kod w skrypcie Pythona:

def fun(): 
  #Code here

fun()

Chcę wykonać ten skrypt, a także dowiedzieć się, ile czasu zajęło wykonanie w minutach. Jak dowiedzieć się, ile czasu zajęło wykonanie tego skryptu? Przykład byłby naprawdę mile widziany.

James
źródło
5
Pierwsze trafienie w wyszukiwarkę „czas funkcji pythona”: daniweb.com/software-development/python/code/216610
Piskvor opuścił budynek
Możesz także użyć cProfile . Daje możliwość oddzielnego czasu dla każdej funkcji
Adam Rosenthal

Odpowiedzi:

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

#do something

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

#Python 3: 
print(datetime.now() - startTime)
Petar Ivanov
źródło
5
Nowy w Pythonie, działający w 3.6.1. FYI datetime nie ma już atrybutu now.
WizzleWuzzle
5
@WizzleWuzzle datetime.now()działa, jeśli to zrobisz from datetime import datetime, a nie tylko import datetime(właśnie potwierdzono w Pythonie 3.6.4).
Paul Wicking
130

Czy wykonujesz skrypt z wiersza poleceń w systemie Linux lub UNIX? W takim przypadku możesz po prostu użyć

time ./script.py
Roy
źródło
2
time -p ./script.py -pflaga dla rurociągu
Joy
1
iw czym pomaga nam pipeline?
ak3191
time python myScript.py for windows Wyjście będzie Czas wykonania w sekundach: 38,509970903396606 real 0m38.792s użytkownik 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.')
Podwójne AA
źródło
5
Ostatnia linia powinna prawdopodobnie przeczytać print('It took {0:0.1f} seconds'.format(time.time() - start))w pythonie 3.x.
Chris Mueller
3
@ChrisMueller Pracowałem w pythonie2.7. Zostawię jednak komentarz tutaj, aby ludzie mogli zobaczyć obie wersje.
Podwójne AA
15

Zwykle korzystam z biblioteki clock()lub korzystam time()z niej time. clockmierzy czas tłumacza, podczas gdy timemierzy czas systemowy. Dodatkowe zastrzeżenia można znaleźć w dokumentacji .

Na przykład,

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

Lub alternatywnie możesz użyć timeit. Często używam tego timepodejścia ze względu na to, jak szybko mogę to zrobić, ale jeśli mierzysz czas na wyodrębniony fragment kodu, timeitprzydaje się.

Od docs 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()

Następnie, aby przekonwertować na minuty, możesz po prostu podzielić przez 60. Jeśli chcesz, aby środowisko wykonawcze skryptu miało czytelny format, niezależnie od tego, czy są to sekundy, czy dni, możesz przekonwertować na a timedeltai strto:

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

a to wypisze coś z formularza [D day[s], ][H]H:MM:SS[.UUUUUU]. Możesz sprawdzić dokumentację timedelta .

I wreszcie, jeśli tym, czego naprawdę szukasz, jest profilowanie kodu, Python udostępnia również bibliotekę profili .

Darren Yin
źródło
15
import time 

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

Poprzedni kod działa dla mnie bez problemu!

Malek B.
źródło
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
źródło
wydruk przez 50 sekund to „0: 0: 50”
htzfun
10

Użyj modułu timeit. To jest bardzo łatwe. Uruchom plik example.py, aby był aktywny w powłoce Pythona. Teraz powinieneś móc wywołać swoją funkcję w powłoce. Wypróbuj, aby sprawdzić, czy działa

>>>fun(input)
output

Dobrze, to działa, teraz zaimportuj czas i ustaw licznik czasu

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

Teraz mamy ustawiony zegar, możemy zobaczyć, ile czasu to zajmie

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

I gotowe, powie Ci, ile sekund (lub mniej) zajęło wykonanie tej funkcji. Jeśli jest to prosta funkcja, możesz ją zwiększyć do t.timeit (liczba = 1000) (lub dowolną liczbę!), A następnie podzielić odpowiedź przez liczbę, aby uzyskać średnią.

Mam nadzieję, że to pomoże.

Nagły
źródło
0

użyj pakietów time i datetime.

jeśli ktoś chce wykonać ten skrypt, a także dowiedzieć się, ile czasu zajęło wykonanie w minutach

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

Powyższy kod u mnie działa. Mam nadzieję, że to pomoże.

thrinadhn
źródło