Tiempo multiplataforma de alta precisión en Python
Frecuentes
Visto 602 equipos
2
Estoy escribiendo un juego que debería ejecutarse en varias plataformas. Necesito una buena precisión de tiempo en todas las plataformas.
No me interesa saber la hora del día, lo que me importa es el tiempo transcurrido entre dos llamadas.
Después de leer los documentos, time.time parece mejor en Linux y time.clock mejor en Windows. Pensé en escribir algo como esto:
import os
import time
__all__ = ['hrtime']
platform = os.name
if platform == 'posix':
hrtime = time.time
elif platform == 'nt':
hrtime = time.clock
else:
# 'os2', 'ce', 'java', 'riscos'
raise ValueError("I have no idea what I'm doing.")
Pero, ¿qué pasa con las otras plataformas? ¿MacOS devuelve {posix}? ¿Qué pasa con cygwin, es un Linux o un Windows? ¿Qué es 'ce'? ¿Debería siquiera preocuparme por estas plataformas?
Otra opción podría ser usar el tiempo SDL de pygame. Esto parece tener una precisión de milisegundos en cada plataforma. Como estoy usando SDL para el renderizado, no me importa usar eso. Sin embargo, ahora estoy trabajando en el código de red, y usar el tiempo SDL en mi código de red se siente un poco extraño.
Pregunta: ¿Qué preferirías usar y por qué?
3 Respuestas
1
Como está usando Pygame, debe usar la función de pygame para abstraer eso:
solo llama pygame.time.get_ticks()
- devolverá los microsegundos desde la llamada a pygame.init()
No es tan inusual tener programas que no sean programas orientados a multimedia para llamar funciones SDL desde pygame para cosas como advertencias de sonido o incluso lectura de teclado; no debería haber problemas para usar eso.
respondido 10 mar '12, 15:03
1
Siempre he usado esto y nunca tuve ningún problema:
import sys
import time
if sys.platform == "win32":
# on Windows, the best timer is time.clock()
timerfunc = time.clock
else:
# on most other platforms, the best timer is time.time()
timerfunc = time.time
E incluso si tuviera algunos problemas en alguna otra plataforma, siempre es fácil adaptar el código más adelante.
Sugeriría no usar SDL para esto, por la razón que mencionó, además de que el aumento en la precisión (si corresponde) probablemente ni siquiera se note.
respondido 10 mar '12, 11:03
1
Para obtener la mejor medida del tiempo transcurrido (desde Python 3.3), use time.perf_counter
.
Devuelve el valor (en fracciones de segundo) de un contador de rendimiento, es decir, un reloj con la resolución más alta disponible para medir una duración corta. Incluye el tiempo transcurrido durante el sueño y abarca todo el sistema. El punto de referencia del valor devuelto no está definido, por lo que solo es válida la diferencia entre los resultados de llamadas consecutivas.
respondido 29 nov., 17:14
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python time cross-platform or haz tu propia pregunta.