これは、ツイスト HTTP サーバーの resource.Resource から継承されたクラスの render_GET 関数です。
def render_GET(self, request):
file = request.args['file'][0]
altitude, azimuth, distance = request.args['position'][0].split(",")
self.update_render(file, altitude, azimuth, distance, request.args['clientID'][0])
# update_render() starts a thread that contacts this server again and POSTs data once done
self.add_client(request.args['clientID'][0])
while not self.client_data[request.args['clientID'][0]]:
# I GET STUCK HERE - the thread CANT send data to this dict since server is locked in this loop
time.sleep(0.5)
return "DONE"
何が起こるかというと、関数が何かを実行するまで待機するねじれたサーバーが必要update_render
です (この関数は非同期であるためself.update_render()
、実際のデータがいつ書き込まれるかわからないので、呼び出して開始するだけです。戻りデータはupdate_render()
self.client_data dict に書き込まれます。
ループでこの dict の内容を検出する必要がありますが、そこにスタックしています - サーバーがこのループでロックされているようですが、他のクライアントに応答する必要があります (非同期で self.client_data を埋めます)