2011-12-05 9 views
5

¿Hay alguna manera de obtener tiempo de sistema de alta precisión en python?Tiempo de sistema de alta precisión en python

Tengo una pequeña aplicación para trabajar con el puerto COM virtual. Quiero medir el intervalo de tiempo entre el envío del mensaje y su recepción.

Por el momento, funciona así:

Obtengo el mensaje, utilice

time.time() 

y anexar sus 20 dígitos al mensaje. La aplicación cliente recibe este mensaje y obtiene

time.time() 

nuevamente, luego calcula sus diferencias. En la mayoría de los casos, el intervalo de tiempo (como esperaba) es igual a cero.

La pregunta es: ¿hay alguna forma de hacerlo de una manera más inteligente y con más precisión?

+0

Si el remitente y el receptor están en máquinas diferentes, ¿cómo manejar las diferentes bases de tiempo? En cualquier caso, el controlador del puerto serie le enviará el mensaje cada vez que lo desee, que es increíblemente variable (10 segundos o milisegundos, según mi experiencia). – mtrw

+0

el emisor y el receptor están en la misma máquina (estoy usando puertos COM virtuales). el programa está escrito con fines educativos, por lo que estoy preguntando si hay una manera inteligente de resolver este problema –

+0

relacionado: http://bugs.python.org/issue10278 [time.walltime() en C] (http: // bugs.python.org/review/10278/patch/3730/11849), [en Python llame a clock_gettime() usando ctypes] (http://stackoverflow.com/a/1205762/4279) – jfs

Respuesta

2

Aquí es un extracto de time.clock

En Unix, devolver el tiempo de procesador actual como un número de coma flotante expresado en segundos. La precisión, y de hecho la definición muy del significado de "tiempo de procesador", depende de la función C del mismo nombre, pero en cualquier caso, esta es la función para uso para la evaluación comparativa Python o algoritmos de tiempo

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 punto flotante, basado en la función Win32 QueryPerformanceCounter(). La resolución es típicamente mejor que un microsegundo.

(énfasis mío)

+0

muchas gracias por su respuesta, pero las aplicaciones del cliente y del remitente funcionan como procesos diferentes. Entonces, ¿cómo puedo usar esta función para calcular el intervalo de tiempo? –

+0

Realmente no podría decir. La mejor posibilidad sería tener el bloque '' 'send''' hasta que se reciba el mensaje, para que pueda ver el tiempo antes y después. Una forma de hacerlo sería esperar una respuesta, pero eso influiría en sus resultados. La otra opción es enviar un mensaje muy largo que tardaría minutos en transmitirse, por lo que '' 'time.time()' '' tendría suficiente precisión. Realmente espero que alguien encuentre una mejor solución ... – FakeRainBrigand

+0

Calibre el QueryPerformanceCounter contra time.time al comienzo de su código, por lo que la marca de tiempo que envíe será una versión de alta precisión de time.time(). ¡Merece un intento! –

Cuestiones relacionadas