Как сделать правильную галочку на сервере?

Я пытаюсь сделать игровой сервер, который обновляется после определенного периода.

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

Когда я делаю это, Python потребляет 100% вычислительной мощности на одном из ядер. Я не очень понимаю, почему это происходит и как это исправить, если это возможно.

1 ответ

Решение

Вставьте time.sleep(0.01) ждать 10 миллисекунд между каждым опросом, в противном случае ваш цикл непрерывно опрашивает время без отключения питания процессора.

Изменить: Это лучше, только ждет один раз, если это необходимо. В случае огромной перегрузки ЦП время ожидания может быть отрицательным, и в этом случае 2 действия могут быть запущены одновременно. Целевое время пересчитывается постоянно, чтобы избежать ошибок накопления поплавка.

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)
Другие вопросы по тегам