ゲームサーバー内のすべてのプレイヤーとオブジェクトに対して tick() を実行する関数があります。これを行うには、セットを 0.1 秒ごとにループします。私はそれがしっかりした.1である必要があります。多くのタイミングと計算は、この一時停止が 0.1 秒まで可能な限り正確であることに依存しています。これを実現するために、これをティック スレッドに追加しました。
start_time = time.time()
# loops and code and stuff for tick thread in here...
time_lapsed = time.time() - start_time # get the time it took to run the above code
if 0.1 - time_lapsed > 0:
time.sleep(0.1 - time_lapsed)
else:
print "Server is overloaded!"
# server lag is greater that .1, so don't sleep, and just eat it on this run.
# the goal is to never see this.
私の質問は、これがこれを行うための最良の方法ですか? ループの持続時間が 0.01 の場合、time_lapsed == 0.01 ... となり、スリープは 0.09 だけにする必要があります。うまくいかないようなので質問します。先日、サーバーが過負荷になっているというメッセージが表示されるようになりましたが、サーバーは過負荷ではありませんでした。睡眠を「動的に」制御する良い方法について何か考えはありますか? スリープせずに 10 分の 1 秒ごとにコードを実行する別の方法があるのではないでしょうか?