내 게임 서버 내의 모든 플레이어와 객체에 대해 tick()을 실행하는 함수가 있습니다. 나는 0.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 ... 그러면 수면은 0.09에 불과합니다. 그것이 작동하지 않기 때문에 나는 묻습니다. 나는 오버로드 된 서버 메시지를 다른 날에 받기 시작했고, 서버는 확실히 오버로드되지 않았습니다. 수면을 "동적으로"제어하는 좋은 방법에 대한 생각? 수면없이 10 분의 1 초마다 코드를 실행하는 다른 방법이 있습니까?
나는'try : time.sleep (0.1-elapsed);을 할 것이다. if 문으로 계산 시간을 줄이기 위해'except : except'를 사용합니다. 하지만 그 밖의 모든 것들이 좋아 보인다. – inspectorG4dget
어떤 이유로 든 틱 스레드를위한 루프와 코드 및 물건들이 100ms보다 오래 걸린다. 서버가 "확실히 과부하되지 않았 음"을 어떻게 확신합니까? – bdares
어떤 운영 체제를 사용하고 있습니까? 가장 좋은 기능을 선택하는 것이 중요합니다. –