¿Cómo medir el tiempo transcurrido en Python?

5 minutos de lectura

¿Como medir el tiempo transcurrido en Python
gilbert8

Lo que quiero es comenzar a contar el tiempo en algún lugar de mi código y luego obtener el tiempo transcurrido, para medir el tiempo que tomó ejecutar algunas funciones. Creo que estoy usando mal el módulo timeit, pero los documentos son confusos para mí.

import timeit

start = timeit.timeit()
print("hello")
end = timeit.timeit()
print(end - start)

  • timeit.timeit() imprime el tiempo que tarda en ejecutar su argumento, que es “pasar” por defecto. en su lugar, debe usar start = time.time() end = time.time()

    – Llopeth

    31 de marzo de 2021 a las 11:49

  • ¿Responde esto a tu pregunta? Medición del tiempo transcurrido con el módulo Tiempo

    – perro naranja

    26 de julio de 2021 a las 9:07

1646961012 474 ¿Como medir el tiempo transcurrido en Python
jfs

Utilizar timeit.default_timer en lugar de timeit.timeit. El primero proporciona el mejor reloj disponible en su plataforma y versión de Python automáticamente:

from timeit import default_timer as timer

start = timer()
# ...
end = timer()
print(end - start) # Time in seconds, e.g. 5.38091952400282

timeit.default_timer se asigna a time.time() o time.clock() según el sistema operativo. En Python 3.3+ temporizador_predeterminado es tiempo.perf_counter() en todas las plataformas. Ver Python – time.clock() vs. time.time() – ¿precisión?

Ver también:

  • Excelente respuesta – usando cronométralo producirá resultados mucho más precisos ya que automáticamente tendrá en cuenta cosas como la recolección de basura y las diferencias del sistema operativo

    – lkgarrison

    11 de diciembre de 2016 a las 3:16


  • Esto da tiempo en ms o segundos?

    – Katia

    8 de febrero de 2017 a las 16:52

  • @KhushbooTiwari en fracciones de segundo.

    – jfs

    8 de febrero de 2017 a las 16:59


  • Creo que esta nota de la documentación oficial debe agregarse. default_timer() measurations can be affected by other programs running on the same machine, so the best thing to do when accurate timing is necessary is to repeat the timing a few times and use the best time. The -r option is good for this; the default of 3 repetitions is probably enough in most cases. On Unix, you can use time.clock() to measure CPU time.

    – KG

    06/07/2017 a las 10:00

  • @KGS: la medición del rendimiento es muy complicada de una manera sutil (es fácil engañarse a uno mismo). Hay muchos otros comentarios que podrían ser relevantes aquí. Siga los enlaces en la respuesta. También te puede interesar el perf módulo (inexistente en el momento de la respuesta) que proporciona la misma interfaz pero a veces la hace diferente de la timeit decisiones del módulo sobre cómo medir el rendimiento del tiempo.

    – jfs

    6 de julio de 2017 a las 13:52


  • Utilizar timeit.default_timer en lugar de time.perf_counter. El primero elegirá el temporizador apropiado para medir el rendimiento del tiempo ajustado para su plataforma y versión de Python. process_time() lo hace no incluyen el tiempo durante el sueño y por lo tanto no es apropiado para medir el tiempo transcurrido.

    – jfs

    22 de febrero de 2015 a las 14:30


  • Estoy usando la implementación sugerida por Pierre, ¿los valores se dan en segundos?

    – ugotchi

    12 de agosto de 2016 a las 8:01

  • Esta respuesta parece fuera de tema (bueno, la pregunta no era muy específica). Hay dos medidas de “tiempo”: tiempo de reloj de pared entre dos puntos, del consumo de CPU del proceso.

    –Franklin Piat

    26 de julio de 2019 a las 9:08


  • @fjs timeit.default_timer usos time.perf_counter en Python >=3.3 docs.python.org/3/library/timeit.html#timeit.default_timer

    – ruohola

    5 de febrero de 2021 a las 15:11

  • elapsed_time devuelve 0.07812 por ejemplo. ¿Cómo interpreto eso? ¿Sería un segundo 1.000 para que mi secuencia de comandos se ejecutara en 7.812 milisegundos?

    – Vega

    29 sep 2021 a las 10:58

¿Como medir el tiempo transcurrido en Python
gal bracha

Midiendo el tiempo en segundos:

from timeit import default_timer as timer
from datetime import timedelta

start = timer()

# ....
# (your code runs here)
# ...

end = timer()
print(timedelta(seconds=end-start))

Producción:

0:00:01.946339

  • Esta es la respuesta más concisa con el resultado más limpio.

    – Dave Liu

    30 mayo 2020 a las 23:05

1646961013 190 ¿Como medir el tiempo transcurrido en Python
Comunidad

Dada una función que le gustaría cronometrar,

prueba.py:

def foo(): 
    # print "hello"   
    return "hello"

la forma más fácil de usar timeit es llamarlo desde la línea de comando:

% python -mtimeit -s'import test' 'test.foo()'
1000000 loops, best of 3: 0.254 usec per loop

No intente usar time.time o time.clock (ingenuamente) para comparar la velocidad de las funciones. Pueden dar resultados engañosos.

PD. No coloque declaraciones de impresión en una función que desee cronometrar; en caso contrario el tiempo medido dependerá de la velocidad del terminal.

  • Esta es la respuesta más concisa con el resultado más limpio.

    – Dave Liu

    30 mayo 2020 a las 23:05

1646961014 715 ¿Como medir el tiempo transcurrido en Python
Nicolás Riley

Es divertido hacer esto con un administrador de contexto que recuerda automáticamente la hora de inicio al ingresar a un with bloque, luego congela la hora de finalización al salir del bloque. Con un pequeño truco, incluso puede obtener un recuento del tiempo transcurrido dentro del bloque desde la misma función de administrador de contexto.

La biblioteca central no tiene esto (pero probablemente debería). Una vez en su lugar, puede hacer cosas como:

with elapsed_timer() as elapsed:
    # some lengthy code
    print( "midpoint at %.2f seconds" % elapsed() )  # time so far
    # other lengthy code

print( "all done at %.2f seconds" % elapsed() )

Aquí está administrador de contexto código suficiente para hacer el truco:

from contextlib import contextmanager
from timeit import default_timer

@contextmanager
def elapsed_timer():
    start = default_timer()
    elapser = lambda: default_timer() - start
    yield lambda: elapser()
    end = default_timer()
    elapser = lambda: end-start

Y algún código de demostración ejecutable:

import time

with elapsed_timer() as elapsed:
    time.sleep(1)
    print(elapsed())
    time.sleep(2)
    print(elapsed())
    time.sleep(3)

Tenga en cuenta que por el diseño de esta función, el valor de retorno de elapsed() se congela al salir del bloque y las llamadas posteriores devuelven la misma duración (de unos 6 segundos en este ejemplo de juguete).

  • Otro ejemplo de administrador de contexto: dabeaz.blogspot.fr/2010/02/…

    – Jérôme

    3 mayo 2016 a las 14:03

  • Buen ejemplo de @Jérôme: lo adapté como otra respuesta: stackoverflow.com/a/41408510/243392

    –Brian Burns

    31 de diciembre de 2016 a las 13:05

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad