Tengo un programa de línea de comandos en Python que tarda un poco en terminar. Quiero saber el tiempo exacto que lleva terminar de correr.
He mirado el timeit
módulo, pero parece que es solo para pequeños fragmentos de código. Quiero cronometrar todo el programa.
round(time.time() - start_time, 2)
(o cualquier decimal que desee), estaba obteniendo números científicos como 1.24e-5.'%.2f'
lugar deround()
aquí.Pongo este
timing.py
módulo en mi propiosite-packages
directorio, y solo insertoimport timing
en la parte superior de mi módulo:También puedo llamar
timing.log
desde mi programa si hay etapas significativas dentro del programa que quiero mostrar. Pero solo incluirimport timing
imprimirá los tiempos de inicio y finalización, y el tiempo transcurrido general. (Perdone mi oscurasecondsToStr
función, solo formatea un número de segundos de coma flotante a hh: mm: ss.sss).Nota: Una versión de Python 3 del código anterior se puede encontrar aquí o aquí .
fuente
from functools import reduce
en la parte superior y ponga corchetes alrededor de cada declaración de impresión. ¡Funciona genial!En Linux o Unix:
En Windows, vea esta pregunta de StackOverflow: ¿Cómo mido el tiempo de ejecución de un comando en la línea de comandos de Windows?
Para una salida más detallada,
fuente
secondsToStr()
función.Realmente me gusta la respuesta de Paul McGuire , pero uso Python 3. Entonces, para aquellos que estén interesados: aquí hay una modificación de su respuesta que funciona con Python 3 en * nix (imagino, en Windows, que
clock()
debería usarse en lugar detime()
):Si encuentra esto útil, aún debe votar su respuesta en lugar de esta, ya que hizo la mayor parte del trabajo;).
fuente
timedelta(seconds=t).total_seconds()
útil.time.clock()
devuelve el tiempo del procesador, lo que nos permite calcular solo el tiempo utilizado por este proceso (en Unix de todos modos). La documentación dice "en cualquier caso, esta es la función que se debe usar para evaluar los algoritmos de sincronización o de Python"fuente
Me gusta la salida
datetime
que proporciona el módulo, donde los objetos delta de tiempo muestran días, horas, minutos, etc., según sea necesario de una manera legible para los humanos.Por ejemplo:
Salida de muestra, p. Ej.
o
Como JF Sebastian mencionó, este enfoque podría encontrar algunos casos difíciles con la hora local, por lo que es más seguro usarlo:
fuente
timedelta(seconds=time.monotonic()-start)
aquí (otime.time()
si el intervalo es grande). No reste los objetos ingenuos de fecha y hora que representan la hora local; la hora local no es monótonastart_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time)
. Confío en que tienes razón, pero también debes formatearlo cuando regresesdatetime.timedelta(0, 0, 76)
. Además, parece que el método monotónico solo se agregó en Python 3.str()
para hacerlo "humano". Actualizaré la respuesta, gracias.Puede usar el perfil de perfil de Python cProfile para medir el tiempo de CPU y, además, cuánto tiempo pasa dentro de cada función y cuántas veces se llama a cada función. Esto es muy útil si desea mejorar el rendimiento de su script sin saber por dónde comenzar. Esta respuesta a otra pregunta de Stack Overflow es bastante buena. Siempre es bueno echar un vistazo en la documentación también.
Aquí hay un ejemplo de cómo perfilar un script usando cProfile desde una línea de comando:
fuente
X function calls in Y CPU seconds
. Si desea la hora del reloj de pared, use una de las otras respuestas aquí.Aún mejor para Linux:
time
fuente
time.clock ()
time.perf_counter ()
time.process_time ()
fuente
Solo usa el
timeit
módulo. Funciona con Python 2 y Python 3.Regresa en segundos y puede tener su tiempo de ejecución. Es simple, pero debe escribirlos en la función principal que inicia la ejecución del programa. Si desea obtener el tiempo de ejecución incluso cuando obtiene un error, tome su parámetro "Inicio" y calcule allí como:
fuente
finally
parte?El siguiente fragmento imprime el tiempo transcurrido en un agradable
<HH:MM:SS>
formato legible por humanos .fuente
fuente
En IPython , "timeit" cualquier script:
fuente
Ejecuta la
your_module.main()
función una vez e imprime el tiempo transcurrido usandotime.time()
función como temporizador.Para emular
/usr/bin/time
en Python, vea Subproceso de Python con / usr / bin / time: ¿cómo capturar información de temporización pero ignorar todos los demás resultados? .Para medir el tiempo de CPU (por ejemplo, no incluya el tiempo durante
time.sleep()
) para cada función, puede usar elprofile
módulo (cProfile
en Python 2):Puede pasar
-p
altimeit
comando anterior si desea usar el mismo temporizador que elprofile
módulo.Consulte ¿Cómo puede perfilar un script de Python?
fuente
También me gustó la respuesta de Paul McGuire y se me ocurrió un formulario de administrador de contexto que se adaptaba mejor a mis necesidades.
fuente
Para las personas de datos que usan Jupyter Notebook
En una celda, puede usar el
%%time
comando mágico de Jupyter para medir el tiempo de ejecución:Salida
Esto solo capturará el tiempo de ejecución de una celda en particular. Si desea capturar el tiempo de ejecución de todo el cuaderno (es decir, el programa), puede crear un nuevo cuaderno en el mismo directorio y en el nuevo cuaderno ejecutar todas las celdas:
Supongamos que se llama el cuaderno de arriba
example_notebook.ipynb
. En un cuaderno nuevo dentro del mismo directorio:Salida
fuente
Hay un
timeit
módulo que se puede usar para medir el tiempo de ejecución del código Python.Tiene documentación detallada y ejemplos en la documentación de Python, 26.6. timeit: mide el tiempo de ejecución de pequeños fragmentos de código .
fuente
timeit
en la pregunta. La pregunta es cómo se puede usar aquí (o se debe usar aquí y cuáles son las alternativas). Aquí hay una posible respuesta .Utilice line_profiler .
line_profiler perfilará el tiempo que tardan en ejecutarse las líneas de código individuales. El generador de perfiles se implementa en C a través de Cython para reducir la sobrecarga de la creación de perfiles.
Los resultados serán:
fuente
Usé una función muy simple para cronometrar una parte de la ejecución del código:
Y para usarlo, simplemente llámelo antes del código a medir para recuperar el tiempo de la función, y luego llame a la función después del código con comentarios. El tiempo aparecerá delante de los comentarios. Por ejemplo:
Entonces la salida se verá así:
fuente
Estaba teniendo el mismo problema en muchos lugares, así que creé un paquete de conveniencia
horology
. Puede instalarlopip install horology
y luego hacerlo de la manera elegante:dará salida:
O incluso más simple (si tiene una función):
dará salida:
Se ocupa de unidades y redondeo. Funciona con python 3.6 o más reciente.
fuente
main.interval
.Esta es la respuesta de Paul McGuire que funciona para mí. Por si alguien tenía problemas para ejecutarlo.
Llame
timing.main()
desde su programa después de importar el archivo.fuente
Timeit es una clase en Python utilizada para calcular el tiempo de ejecución de pequeños bloques de código.
Default_timer es un método en esta clase que se usa para medir el tiempo del reloj de pared, no el tiempo de ejecución de la CPU. Por lo tanto, otra ejecución del proceso podría interferir con esto. Por lo tanto, es útil para pequeños bloques de código.
Una muestra del código es la siguiente:
fuente
timeit
es la mejor respuesta de la OMI para muchos casos.Respuesta posterior, pero yo uso
timeit
:code_to_test
.number
El argumento especifica la cantidad de veces que el código debe repetirse.fuente
El tiempo de la medida de ejecución de un programa Python podría ser inconsistente dependiendo de:
Esto se debe a que la forma más efectiva es usar el "Orden de crecimiento" y aprender la notación "O" grande para hacerlo correctamente.
De todos modos, puede intentar evaluar el rendimiento de cualquier programa de Python en pasos específicos de conteo de máquinas por segundo utilizando este algoritmo simple: adapte esto al programa que desea evaluar
fuente
Lo haces simplemente en Python. No hay necesidad de hacerlo complicado.
fuente
Similar a la respuesta de @rogeriopvl, agregué una ligera modificación para convertir a hora minuto segundos usando la misma biblioteca para trabajos de larga ejecución.
Salida de muestra
fuente
Primero, instale el paquete amigable para humanos abriendo Símbolo del sistema (CMD) como administrador y escriba allí:
pip install humanfriendly
Código:
Salida:
fuente
Para usar la respuesta actualizada de metakermit para Python 2.7, necesitará el paquete monótono .
El código sería entonces el siguiente:
fuente
Intenté y encontré la diferencia horaria usando los siguientes scripts.
fuente
Si desea medir el tiempo en microsegundos, puede usar la siguiente versión, basada completamente en las respuestas de Paul McGuire y Nicojo : es el código Python 3. También le agregué algo de color:
log () => función que imprime la información de temporización.
txt ==> primer argumento para iniciar sesión, y su cadena para marcar el tiempo.
atexit ==> Módulo de Python para registrar funciones a las que puede llamar cuando se cierra el programa.
fuente