How to make a proper server tick?
I am trying to make a game server which updates after a certain period.
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
When I do this thing, python consumes 100% computing power on one of the cores. I don't really understand why is this happening and how to fix this if possible.
Solution 1:
Insert a time.sleep(0.01)
to wait 10 millis between each time poll otherwise your loop polls time continuously without releasing power to the cpu.
Edit: That is better, only waits once if needed. Should a huge CPU overload occur, the time to wait could be negative, and in that case 2 actions could be triggered at once. And targeted time is recomputed constantly to avoid float accumulation errors.
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)