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 timeitmó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.pymódulo en mi propiosite-packagesdirectorio, y solo insertoimport timingen la parte superior de mi módulo:También puedo llamar
timing.logdesde mi programa si hay etapas significativas dentro del programa que quiero mostrar. Pero solo incluirimport timingimprimirá los tiempos de inicio y finalización, y el tiempo transcurrido general. (Perdone mi oscurasecondsToStrfunció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 reduceen 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
datetimeque 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:
timefuente
time.clock ()
time.perf_counter ()
time.process_time ()
fuente
Solo usa el
timeitmó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
finallyparte?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/timeen 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 elprofilemódulo (cProfileen Python 2):Puede pasar
-paltimeitcomando anterior si desea usar el mismo temporizador que elprofilemó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
%%timecomando 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
timeitmó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
timeiten 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 horologyy 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
timeites la mejor respuesta de la OMI para muchos casos.Respuesta posterior, pero yo uso
timeit:code_to_test.numberEl 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 humanfriendlyCó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