如何使正确的服务器打勾?
How to make a proper server tick?
我正在尝试制作一个游戏服务器,它会在一段时间后更新。
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% 的计算能力。我真的不明白为什么会这样,如果可能的话如何解决这个问题。
插入一个 time.sleep(0.01)
以在每次轮询之间等待 10 毫秒,否则您的循环会连续轮询时间而不会释放 cpu 的电源。
编辑:这样更好,只在需要时等待一次。如果发生巨大的 CPU 过载,等待时间可能为负,在这种情况下,可能会同时触发 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)
我正在尝试制作一个游戏服务器,它会在一段时间后更新。
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% 的计算能力。我真的不明白为什么会这样,如果可能的话如何解决这个问题。
插入一个 time.sleep(0.01)
以在每次轮询之间等待 10 毫秒,否则您的循环会连续轮询时间而不会释放 cpu 的电源。
编辑:这样更好,只在需要时等待一次。如果发生巨大的 CPU 过载,等待时间可能为负,在这种情况下,可能会同时触发 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)