Sí, es posible hacerlo en un solo hilo. Sin embargo, en términos generales, querrá actualizar los objetos en cada cuadro y no solo cuando haya ciclos de reserva. Sus animaciones y movimientos se desconectarán de la velocidad de fotogramas y se verán entrecortados si no lo hace. Si estás hablando más sobre actualizaciones de IA o sobre otra cosa que no necesita ser en tiempo real, le pondría un temporizador. Debe saber cuál es su velocidad de fotogramas objetivo y el tiempo de inactividad será lo que quede después de que se haya completado todo lo demás.
Digamos que estás apuntando a 60 FPS para tu juego. Eso te deja con 16.667 ms para realizar todo el trabajo que necesitas para hacer cada fotograma. Al comienzo del juego, obtén la hora actual usando el temporizador de mayor resolución disponible, agrégale 16.667 ms y guárdalo en algún lugar. Creo que la función en python es time () aunque ha pasado un tiempo desde que trabajé en el lenguaje. Una vez que se complete el procesamiento, ingrese un bucle que verifique la hora actual con la hora que ha grabado. Si la hora actual es menor que la hora de finalización de la trama, update_a_very_small_amount. No me preocuparía mucho el procesamiento que va más allá del final del marco, ya que su pequeña actualización debería procesarse rápidamente. Solo sería un ligero retraso hasta el inicio del siguiente cuadro y parece que tienes suficiente tiempo de inactividad para manejarlo.
Después de que el marco haya terminado de procesarse, agregue 16.667 ms al tiempo que se almacenó para el final del último marco para averiguar dónde debería estar el final del siguiente marco. Si utiliza el tiempo actual + 16.667 ms y el procesamiento continúa, el final del siguiente cuadro será expulsado por el tiempo que transcurra el último cuadro.
Re: Segunda edición
Para aclarar, utilizo el término frame-rate aquí para indicar una iteración a través del bucle principal. Si se basa en la velocidad de entrada del usuario, imagino que su objetivo es simplemente hacer que el juego se sienta receptivo. De lo contrario, podría verificar la entrada y actualizar todo cada vez a través del ciclo, incluso si tarda 10 segundos en hacerlo. Sin embargo, para que se sienta receptivo, es probable que desee verificar la entrada alrededor de 20 veces por segundo, lo que proporciona una velocidad de cuadros efectiva de 20 FPS, incluso si no está dibujando estos cuadros. Esto le daría 50 ms para actualizar las cosas antes de que necesite verificar la entrada nuevamente.