जो मैं समझता हूं उससे tornado.gen मॉड्यूल दस्तावेज़ों से यह है कि tornado.gen.Task में tornado.gen.Callback और tornado.gen शामिल हैं। अद्वितीय कॉल के साथ जुड़े प्रत्येक कॉलबैक/प्रतीक्षा जोड़ी के साथ प्रतीक्षा करें। ..टॉरनाडो असिंक 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")
तो उपर्युक्त कोड विभिन्न यूआरएल से सभी प्रतिक्रिया प्राप्त करेगा। अब मुझे वास्तव में पूरा करने की आवश्यकता है जैसे ही एक http_client डेटा लौटाता है, प्रतिक्रिया को वापस करना है। तो अगर 'tornadoweb.org' पहले डेटा लौटाता है, तो उसे स्वयं लिखना चाहिए (लिखना) और def में एक लूप() को अन्य http_clients को पूरा करने के लिए इंतजार करना चाहिए। tornado.gen इंटरफ़ेस का उपयोग करके इसे लिखने के बारे में कोई भी विचार।
मैं क्या इस
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