¿Cómo obtengo el tiempo de ejecución de un programa Python?

Resuelto john2x asked hace 15 años • 40 respuestas

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 timeitmódulo, pero parece que es sólo para pequeños fragmentos de código. Quiero cronometrar todo el programa.

john2x avatar Oct 13 '09 06:10 john2x
Aceptado

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 ---
rogeriopvl avatar Oct 13 '2009 00:10 rogeriopvl

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
steveha avatar Oct 12 '2009 23:10 steveha

Puse este timing.pymódulo en mi propio site-packagesdirectorio y simplemente lo inserté import timingen 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.logdesde mi programa si hay etapas importantes dentro del programa que quiero mostrar. Pero simplemente incluirlo import timingimprimirá las horas de inicio y finalización, y el tiempo total transcurrido. (Perdóneme por mi secondsToStrfunció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í .

PaulMcG avatar Oct 13 '2009 02:10 PaulMcG