python - ¿Cómo hacer que un servidor funcione correctamente?
timing (1)
Estoy tratando de hacer un servidor de juegos que se actualice después de un cierto período.
import time
last_time = time.time()
tick = 1
time_since_last_update = 0
while True:
new_time = time.time()
dt = new_time - last_time
time_since_last_update += dt
last_time = new_time
if time_since_last_update > tick:
print("Magic happens")
time_since_last_update = 0
Cuando hago esto, Python consume el 100% de potencia informática en uno de los núcleos. Realmente no entiendo por qué está sucediendo esto y cómo solucionarlo si es posible.
Inserte un
time.sleep(0.01)
para esperar 10 milis entre cada sondeo de tiempo; de lo contrario, su ciclo sondea el tiempo continuamente sin liberar energía a la CPU.
Editar: Eso es mejor, solo espera una vez si es necesario. Si se produce una sobrecarga de la CPU, el tiempo de espera podría ser negativo y, en ese caso, se podrían activar 2 acciones a la vez. Y el tiempo objetivo se recalcula constantemente para evitar errores de acumulación de flotación.
import time
start_time = time.time()
tick = 1.0 # 1 second
tick_count = 0
while True:
new_time = time.time()
tick_count += 1
targeted_time = start_time + tick*tick_count
time_to_wait = targeted_time - new_time
if time_to_wait>0:
time.sleep(time_to_wait)
print("Magic happens,waited %f seconds" % time_to_wait)