Descubra el tiempo que le llevó a un script de Python completar la ejecución

143

Tengo el siguiente código en un script de Python:

def fun(): 
  #Code here

fun()

Quiero ejecutar este script y también averiguar cuánto tiempo tardó en ejecutarse en minutos. ¿Cómo puedo saber cuánto tiempo tardó en ejecutarse este script? Un ejemplo sería muy apreciado.

James
fuente
55
Primer golpe en la búsqueda de "sincronización de la función python": daniweb.com/software-development/python/code/216610
Piskvor salió del edificio el
También puedes usar cProfile . Te da la opción de cronometrar cada función por separado
Adam Rosenthal

Respuestas:

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

#do something

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

#Python 3: 
print(datetime.now() - startTime)
Petar Ivanov
fuente
55
Nuevo en Python, trabajando en 3.6.1. FYI datetime ya no tiene un atributo ahora.
WizzleWuzzle
55
@WizzleWuzzle datetime.now()funciona si lo haces from datetime import datetime, no solo import datetime(solo confirmado en Python 3.6.4).
Paul Wicking
130

¿Ejecutas el script desde la línea de comandos en Linux o UNIX? En ese caso, podrías usar

time ./script.py
Roy
fuente
2
time -p ./script.py -pflag for pipeline
Joy
1
¿Y con qué nos ayuda pipeline?
ak3191
time python myScript.py para windows La salida será Tiempo de ejecución en segundos: 38.509970903396606 real 0m38.792s usuario 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.')
Doble AA
fuente
55
La última línea probablemente debería leer print('It took {0:0.1f} seconds'.format(time.time() - start))en python 3.x.
Chris Mueller
3
@ChrisMueller Estaba trabajando en python2.7. Sin embargo, dejaré el comentario aquí para que la gente pueda ver ambas versiones.
Doble AA
15

Lo que suelo hacer es usar clock()o time()de la timebiblioteca. clockmide el tiempo del intérprete, mientras que timemide el tiempo del sistema. Advertencias adicionales se pueden encontrar en los documentos .

Por ejemplo,

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

O, alternativamente, puedes usar timeit. A menudo uso el timeenfoque debido a la rapidez con la que puedo golpearlo, pero si está cronometrando un fragmento de código aislable, timeites útil.

Desde el momento en que los documentos ,

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

A continuación, para convertir a los minutos, sólo tiene que dividir por 60. Si desea que el tiempo de ejecución de secuencias de comandos en un formato fácil de leer, ya sea segundos o días, puede convertir a una timedeltay strque:

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

y eso imprimirá algo del formulario [D day[s], ][H]H:MM:SS[.UUUUUU]. Puedes consultar los documentos de timedelta .

Y finalmente, si lo que realmente está buscando es perfilar su código, Python también pone a disposición la biblioteca de perfiles .

Darren Yin
fuente
15
import time 

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

¡El código anterior funciona para mí sin ningún problema!

Malek B.
fuente
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
fuente
la impresión por 50 segundos es "0: 0: 50"
htzfun
10

Utiliza el módulo timeit. Es muy fácil. Ejecute su archivo example.py para que esté activo en Python Shell, ahora debería poder llamar a su función en el shell. Pruébalo para comprobar que funciona

>>>fun(input)
output

Bien, eso funciona, ahora importa timeit y configura un temporizador

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

Ahora que tenemos nuestro temporizador configurado, podemos ver cuánto tiempo lleva

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

Y ahí vamos, le dirá cuántos segundos (o menos) le tomó ejecutar esa función. Si es una función simple, puede aumentarla a t.timeit (número = 1000) (¡o cualquier número!) Y luego dividir la respuesta por el número para obtener el promedio.

Espero que esto ayude.

Rápido
fuente
0

use los paquetes de hora y fecha y hora.

si alguien quiere ejecutar este script y también averiguar cuánto tiempo tardó en ejecutarse en minutos

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

El código anterior funciona para mí. Espero que esto ayude.

thrinadhn
fuente