私はtornado.genモジュールのドキュメントから理解して何から結果を返すには、tornado.gen.Taskが一意のキーに関連付けられている各コールバック/待機組とtornado.gen.Callbackとtornado.gen.Waitで含むことです。 ..トルネード非同期HTTPを段階
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
http_client = AsyncHTTPClient()
http_client.fetch("http://google.com",
callback=(yield tornado.gen.Callback("google")))
http_client.fetch("http://python.org",
callback=(yield tornado.gen.Callback("python")))
http_client.fetch("http://tornadoweb.org",
callback=(yield tornado.gen.Callback("tornado")))
response = yield [tornado.gen.Wait("google"), tornado.gen.Wait("tornado"), tornado.gen.Wait("python")]
do_something_with_response(response)
self.render("template.html")
したがって、上記のコードは異なるURLからのすべての応答を取得します。 は、今私が実際に達成するために必要なものとすぐhttp_clientがデータを返すものとして応答を返すことです。 「tornadoweb.org」の最初のデータを返すのであれば、それが完了するために、他のhttp_clientsを待っておく必要がありself.write(respose)とdefの取得のループ()を行う必要があります。この使用tornado.genインターフェイスを作成する方法について 任意のアイデア。私はすなわちあなたがinline callbacks
を使うべきではありませんそれはケースだこの
class GenAsyncHandler2(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
http_client = AsyncHTTPClient()
http_client.fetch("http://google.com",
callback=(yield tornado.gen.Callback("google")))
http_client.fetch("http://python.org",
callback=(yield tornado.gen.Callback("python")))
http_client.fetch("http://tornadoweb.org",
callback=(yield tornado.gen.Callback("tornado")))
while True:
response = self.get_response()
if response:
self.write(response)
self.flush()
else:
break
self.finish()
def get_response(self):
for key in tornado.gen.availableKeys():
if key.is_ready:
value = tornado.gen.pop(key)
return value
return None