¿Hay un modo/módulo simple para correctamente medir el tiempo transcurrido en python? Sé que puedo simplemente llamar al time.time()
dos veces y tomar la diferencia, pero eso arrojará resultados incorrectos si se cambia la hora del sistema. Por supuesto, eso no sucede muy a menudo, pero indica que estoy midiendo lo incorrecto.Medición del tiempo transcurrido en python
El uso de time.time()
para medir duraciones es increíblemente indirecto cuando lo piensas. Usted toma la diferencia de dos mediciones de tiempo absoluto que a su vez están construidas a partir de medidas de duración (realizadas por temporizadores) y tiempos absolutos conocidos (establecidos manualmente o mediante ntp), que no le interesan en absoluto.
Entonces, ¿hay alguna manera de consultar este "tiempo del temporizador" directamente? Me imagino que se puede representar como un valor de milisegundos o microsegundos que no tiene una representación absoluta significativa (y por lo tanto no necesita ajustarse con la hora del sistema). Mirando un poco, parece que esto es exactamente lo que System.nanoTime()
hace en Java, pero no encontré una función Python correspondiente, aunque debería ser (hardware-technical) más fácil de proporcionar que time.time()
.
Editar: Para evitar confusiones y abordar las respuestas a continuación: Esto no se trata de cambios de horario de verano, y tampoco quiero tiempo de CPU - Deseo tiempo físico transcurrido. No necesita ser muy refinado, ni siquiera particularmente preciso. Simplemente no debería darme duraciones negativas, o duraciones que están apagadas por varios órdenes de magnitud (por encima de la granularidad), solo porque alguien decidió configurar el reloj del sistema a un valor diferente. Esto es lo que la documentación de Python dicen sobre 'time.time()':
Esto es exactamente lo que quiero evitar, ya que puede llevar a cosas extrañas como valores negativos en los cálculos de tiempo. Puedo solucionar esto en este momento, pero creo que es una buena idea aprender a usar las soluciones adecuadas donde sea posible, ya que los kludges volverán a morderlo algún día.
Edit2: Algunas investigaciones muestran que puede obtener una medición independiente del tiempo del sistema como la que quiero en Windows usando GetTickCount64(), en Linux puede obtenerla en el valor de retorno de times(). Sin embargo, todavía no puedo encontrar un módulo que proporcione esta funcionalidad en Python.
Si quiere hacer un benchmark de algo, debe usar 'timeit'. – delnan
relacionado: [¿Cómo puedo obtener duraciones de tiempo monótonas en python?] (Http://stackoverflow.com/questions/1205722/how-do-i-get-monotonic-time-durations-in-python) – jfs