Scopri il tempo impiegato da uno script Python per completare l'esecuzione


143

Ho il seguente codice in uno script Python:

def fun(): 
  #Code here

fun()

Voglio eseguire questo script e anche scoprire quanto tempo ci vuole per eseguire in pochi minuti. Come faccio a sapere quanto tempo ha impiegato l'esecuzione di questo script? Un esempio sarebbe molto apprezzato.


5
Primo colpo alla ricerca di "timing della funzione python": daniweb.com/software-development/python/code/216610
Piskvor ha lasciato l'edificio il

Puoi anche usare cProfile . Ti dà la possibilità di cronometrare ciascuna funzione separatamente
Adam Rosenthal,

Risposte:


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

#do something

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

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

5
Nuovo per Python, funzionante in 3.6.1. Il datetime FYI non ha più un attributo now.
WizzleWuzzle

5
@WizzleWuzzle datetime.now()funziona se lo fai from datetime import datetime, non solo import datetime(solo confermato su Python 3.6.4).
Paul Wicking,

130

Esegui lo script dalla riga di comando su Linux o UNIX? In tal caso, potresti semplicemente usare

time ./script.py

2
time -p ./script.py -pbandiera per pipeline
Gioia

1
e cosa ci aiuta la pipeline?
ak3191

time python myScript.py per windows L'output sarà il tempo di esecuzione in secondi: 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.')

5
L'ultima riga dovrebbe probabilmente essere letta print('It took {0:0.1f} seconds'.format(time.time() - start))in Python 3.x.
Chris Mueller,

3
@ChrisMueller Stavo lavorando in python2.7. Lascerò qui il commento in modo che le persone possano vedere entrambe le versioni.
Doppio AA

15

Quello che faccio di solito è usare clock()o time()dalla timelibreria. clockmisura il tempo dell'interprete, mentre timemisura il tempo di sistema. Ulteriori avvertenze sono disponibili nei documenti .

Per esempio,

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

O in alternativa, puoi usare timeit. Uso spesso l' timeapproccio a causa della velocità con cui riesco a sbatterlo, ma se stai programmando un pezzo di codice isolabile, timeitè utile.

Dai documenti 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()

Quindi per convertire in minuti, puoi semplicemente dividere per 60. Se desideri che lo script runtime sia in un formato facilmente leggibile, che si tratti di secondi o giorni, puoi convertirlo in un timedeltae stresso:

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

e questo stamperà qualcosa del modulo [D day[s], ][H]H:MM:SS[.UUUUUU]. Puoi consultare i documenti di timedelta .

E infine, se ciò che stai effettivamente cercando è la profilazione del tuo codice, Python rende disponibile anche la libreria dei profili .


15
import time 

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

Il codice precedente funziona per me senza problemi!


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

la stampa per 50 secondi è "0: 0: 50"
htzfun

10

Usa il modulo timeit. È molto facile. Esegui il tuo file example.py in modo che sia attivo nella shell Python, ora dovresti essere in grado di chiamare la tua funzione nella shell. Provalo per verificare che funzioni

>>>fun(input)
output

Bene, funziona, ora importa il tempo e imposta un timer

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

Ora abbiamo impostato il nostro timer e possiamo vedere quanto tempo impiega

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

Ed eccoci, ti dirà quanti secondi (o meno) ci sono voluti per eseguire quella funzione. Se è una funzione semplice, puoi aumentarla a t.timeit (numero = 1000) (o qualsiasi numero!) E quindi dividere la risposta per il numero per ottenere la media.

Spero che aiuti.


0

usa i pacchetti time e datetime.

se qualcuno vuole eseguire questo script e scoprire anche quanto tempo ci vuole per eseguire in pochi minuti

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

Il codice sopra funziona per me. Spero che aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.