私はゲームサーバー内のすべてのプレーヤーとオブジェクトに対してtick()を実行する関数を持っています。私は1秒ごとにセットをループすることでこれを行います。私はそれが固体であることが必要です.1。多くのタイミングと数学はこのポーズができるだけ正確に0.1秒になることに依存します。これを達成するために、私はティックスレッドにこれを追加しました:Python - time.sleep()はコードの長さによってオフセットされます
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 ...そしてsleepは0.09にしかならないはずです。それは働いていないように私は尋ねます。私は先日、過負荷のサーバーメッセージを取得し始めました。サーバーは、間違いなく過負荷になっていませんでした。睡眠を「動的に」制御する良い方法についての考えはありますか?たぶん、寝ることなく10分の1秒ごとにコードを実行する別の方法がありますか?
私は 'try:time.sleep(0.1-elapsed);を実行します。 except文を使って計算時間を短縮するために 'pass'を使います。しかし、他のすべてはよさそうだよ – inspectorG4dget
何らかの理由で、目盛りのためのループとコードやものが100ミリ秒以上かかることは明らかです。サーバーが「間違いなく過負荷にならない」ことをどのように確信していますか? – bdares
あなたはどのオペレーティングシステムを使用していますか? –