¿Qué es mejor usar para cronometrar en Python? time.clock () o time.time ()? ¿Cuál proporciona más precisión?
por ejemplo:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
está en desuso y se recomienda su usoperf_counter()
o en suprocess_time()
lugar.timeit.default_timer()
para medir el rendimiento (se asigna a time.time () o time.clock () según el sistema operativo) .time.clock
ytime.process_time
, pero no los procesos secundarios. También vea esta discusión sobre la precisión (por supuesto, varía según el sistema).Respuestas:
A partir de 3.3, time.clock () está en desuso y se sugiere usar time.process_time () o time.perf_counter () en su lugar.
Anteriormente en 2.7, según los documentos del módulo de tiempo :
Además, existe el módulo timeit para comparar fragmentos de código.
fuente
time.clock()
dependía de la plataforma, ytime.process_time()
no lo es. Esta es la razón por la cualtime.clock()
fue desaprobado.La respuesta corta es: la mayoría de las veces
time.clock()
será mejor. Sin embargo, si está cronometrando algo de hardware (por ejemplo, algún algoritmo que puso en la GPU), entoncestime.clock()
se deshará de este tiempo ytime.time()
es la única solución que queda.Nota: cualquiera que sea el método utilizado, el tiempo dependerá de factores que no puede controlar (cuándo cambiará el proceso, con qué frecuencia, ...), esto es peor con
time.time()
pero también existetime.clock()
, por lo que nunca debe ejecutar una prueba de tiempo solamente, pero siempre ejecute una serie de pruebas y observe la media / varianza de los tiempos.fuente
Otros han respondido re:
time.time()
vstime.clock()
.Sin embargo, si está cronometrando la ejecución de un bloque de código con fines de evaluación comparativa / creación de perfiles, debe echar un vistazo al
timeit
módulo .fuente
timeit.default_timer
se asignatime.time()
otime.clock()
depende del sistema operativo. En Python 3.3+default_timer
estátime.perf_counter()
en todas las plataformas.Una cosa a tener en cuenta: cambiar la hora del sistema afecta
time.time()
pero notime.clock()
.Necesitaba controlar algunas ejecuciones de pruebas automáticas. Si un paso del caso de prueba tomó más de una cantidad de tiempo determinada, ese TC se interrumpió para continuar con el siguiente.
Pero a veces se necesitaba un paso para cambiar la hora del sistema (para verificar el módulo del planificador de la aplicación bajo prueba), por lo que después de configurar la hora del sistema unas pocas horas en el futuro, expiró el tiempo de espera del TC y se canceló el caso de prueba. Tuve que cambiar de
time.time()
atime.clock()
para manejar esto correctamente.fuente
clock()
-> número de coma flotanteDevuelve el tiempo de CPU o en tiempo real desde el inicio del proceso o desde la primera llamada a
clock()
. Esto tiene tanta precisión como los registros del sistema.time()
-> número de coma flotanteDevuelve el tiempo actual en segundos desde la época. Fracciones de segundo pueden estar presentes si el reloj del sistema las proporciona.
Por
time()
lo general, es más preciso, porque los sistemas operativos no almacenan el tiempo de ejecución del proceso con la precisión con la que almacenan el tiempo del sistema (es decir, el tiempo real)fuente
Depende de lo que te importe. Si te refieres a WALL TIME (como en, la hora en el reloj de tu pared), time.clock () NO proporciona precisión porque puede administrar el tiempo de CPU.
fuente
time.clock()
en un servidor Linux y los números que obtuve definitivamente no fueron segundostime()
tiene mejor precisión queclock()
en Linux.clock()
solo tiene precisión inferior a 10 ms. Mientras quetime()
da la precisión perfecta. Mi prueba está en CentOS 6.4, python 2.6using clock():
fuente
La diferencia es muy específica de la plataforma.
clock () es muy diferente en Windows que en Linux, por ejemplo.
Para el tipo de ejemplos que describe, probablemente desee el módulo "timeit" en su lugar.
fuente
clock
es"very different"
?Como otros han señalado
time.clock()
está en desuso a favor detime.perf_counter()
otime.process_time()
, pero una resolución de tiempo de Python 3.7 introduce nanosegundo contime.perf_counter_ns()
,time.process_time_ns()
ytime.time_ns()
, junto con otros 3 funciones.Estas 6 nuevas funciones de resolución en nansegundos se detallan en PEP 564 :
Como otros también han notado, use el
timeit
módulo para cronometrar funciones y pequeños fragmentos de código.fuente
En Unix time.clock () mide la cantidad de tiempo de CPU que ha utilizado el proceso actual, por lo que no es bueno para medir el tiempo transcurrido desde algún punto en el pasado. En Windows, medirá los segundos del reloj de pared transcurridos desde la primera llamada a la función. En cualquier sistema, time.time () devolverá los segundos transcurridos desde la época.
Si está escribiendo un código que está destinado solo para Windows, cualquiera de los dos funcionará (aunque usará los dos de manera diferente; no es necesario restar para time.clock ()). Si esto se va a ejecutar en un sistema Unix o si desea un código que se garantice que sea portátil, deberá usar time.time ().
fuente
Respuesta corta: use time.clock () para cronometrar en Python.
En los sistemas * nix, clock () devuelve el tiempo del procesador como un número de coma flotante, expresado en segundos. En Windows, devuelve los segundos transcurridos desde la primera llamada a esta función, como un número de coma flotante.
time () devuelve los segundos desde la época, en UTC, como un número de coma flotante. No hay garantía de que obtendrá una mejor precisión de 1 segundo (aunque time () devuelve un número de coma flotante). También tenga en cuenta que si el reloj del sistema se ha retrasado entre dos llamadas a esta función, la segunda llamada de función devolverá un valor inferior.
fuente
A mi entender, time.clock () tiene tanta precisión como su sistema lo permita.
fuente
Utilizo este código para comparar 2 métodos. Mi sistema operativo es Windows 8, procesador Core i5, RAM 4GB
salida:
tiempo () = 0.0993799996376
reloj () = 0.0993572257367
fuente
Respuesta correcta: Ambos tienen la misma longitud de una fracción.
¿Pero cuál más rápido si
subject
estime
?Un pequeño caso de prueba :
No estoy trabajando en un laboratorio suizo pero lo he probado ...
Basado en esta pregunta:
time.clock()
es mejor quetime.time()
Editar:
time.clock()
es un contador interno, por lo que no se puede usar fuera, tiene limitacionesmax 32BIT FLOAT
, no se puede continuar contando si no se almacenan los primeros / últimos valores. No se puede fusionar otro contador ...fuente
time.clock()
se eliminó en Python 3.8 porque tenía un comportamiento dependiente de la plataforma :En Windows , esta función devuelve los segundos del reloj de pared transcurridos desde la primera llamada a esta función, como un número de coma flotante
Entonces, ¿qué función elegir en su lugar?
Tiempo de procesador : este es el tiempo que este proceso específico pasa ejecutándose activamente en la CPU. La suspensión, la espera de una solicitud web o el tiempo en que solo se ejecutan otros procesos no contribuirán a esto.
time.process_time()
Tiempo de reloj de pared : se refiere a cuánto tiempo ha pasado "en un reloj colgado en la pared", es decir, fuera del tiempo real.
Utilizar
time.perf_counter()
time.time()
también mide el tiempo del reloj de pared, pero se puede restablecer, por lo que puede retroceder en el tiempotime.monotonic()
no se puede restablecer (monótono = solo avanza) pero tiene una precisión menor quetime.perf_counter()
fuente
Comparación del resultado de la prueba entre Ubuntu Linux y Windows 7.
En Ubuntu
En Windows 7
fuente