私はthis questionの亜種を実装するために、竜巻先物を使用しています。過去のデータを蓄積したくないので、キューに問題があります。私は、1つのHTTPリクエストハンドラが、オリジナルが開始した後に発生する別のものの結果を待つのをブロックするようにしたい。tornado.concurrent.Future例外で混乱しています
しかし、私は一歩足りないと思う。何が起こることは、私がどのように見えるエラーが出るということです
Events = dict()
class EventHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self, unit):
# create future to block on
future = tornado.concurrent.Future()
# store the future at a place the produce can find it
Events[unit] = future
# block waiting for the future's response
result = yield future.result()
# deregister the future
Events.pop(unit, None)
self.write(result)
@tornado.gen.coroutine
def post(self, unit):
# fetch the corresponding future if there is one
future = Events.get(unit, None)
if future:
# found one, set the result to pass body over
future.set_result(self.request.body)
else:
print('noop')
self.write(bytes())
:
私のコードは次のようになります
File "./foo.py", line 44, in get
result = yield future.result()
File "/usr/lib/python3/dist-packages/tornado/concurrent.py", line 216, in result
self._check_done()
File "/usr/lib/python3/dist-packages/tornado/concurrent.py", line 294, in _check_done
raise Exception("DummyFuture does not support blocking for results")
私が正しく未来を使用していませんか?それを構成する際に追加のステップが必要ですか?その_check_done
の動作を実装するサブクラスを作るはずですか? Future
は、他のシステムと同義であったと私は仮定していますか?promise
は間違っていますか?未来/約束を使う以外にもこれを行うための別の方法がありますか?あなたは
result = yield future
ない
result = yield future.result()
yield future.result()
を使用する必要が