¿Cómo obtengo el tiempo de ejecución de un programa Python?
Tengo un programa de línea de comandos en Python que tarda un poco en finalizar. Quiero saber el tiempo exacto que tarda en terminar de ejecutarse.
He mirado el timeit
módulo, pero parece que es sólo para pequeños fragmentos de código. Quiero cronometrar todo el programa.
La forma más sencilla en Python:
import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
Esto supone que su programa tarda al menos una décima de segundo en ejecutarse.
Huellas dactilares:
--- 0.764891862869 seconds ---
En Linux o Unix:
$ time python yourprogram.py
En Windows, consulte esta pregunta de StackOverflow: ¿Cómo mido el tiempo de ejecución de un comando en la línea de comandos de Windows?
Para obtener resultados más detallados,
$ time -v python yourprogram.py
Command being timed: "python3 yourprogram.py"
User time (seconds): 0.08
System time (seconds): 0.02
Percent of CPU this job got: 98%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 9480
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 1114
Voluntary context switches: 0
Involuntary context switches: 22
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
Puse este timing.py
módulo en mi propio site-packages
directorio y simplemente lo inserté import timing
en la parte superior de mi módulo:
import atexit
from time import clock
def secondsToStr(t):
return "%d:%02d:%02d.%03d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(t*1000,),1000,60,60])
line = "="*40
def log(s, elapsed=None):
print line
print secondsToStr(clock()), '-', s
if elapsed:
print "Elapsed time:", elapsed
print line
print
def endlog():
end = clock()
elapsed = end-start
log("End Program", secondsToStr(elapsed))
def now():
return secondsToStr(clock())
start = clock()
atexit.register(endlog)
log("Start Program")
También puedo llamar timing.log
desde mi programa si hay etapas importantes dentro del programa que quiero mostrar. Pero simplemente incluirlo import timing
imprimirá las horas de inicio y finalización, y el tiempo total transcurrido. (Perdóneme por mi secondsToStr
función poco conocida, simplemente formatea un número de segundos en coma flotante al formato hh:mm:ss.sss).
Nota: Puede encontrar una versión Python 3 del código anterior aquí o aquí .