aiohttp やネイティブ python 3.5 コルーチンなどの asyncio ライブラリで tornado を使用したいのですが、最新の tornado リリース (4.3) でサポートされているようです。ただし、トルネード イベント ループで使用すると、リクエスト ハンドラが無期限にハングします。aiohttp を使用しない場合 (つまりr = await aiohttp.get('http://google.com/')
、text = await r.text()
以下の行がない場合)、リクエスト ハンドラは通常どおり処理されます。
私のテストコードは次のとおりです。
from tornado.ioloop import IOLoop
import tornado.web
import tornado.httpserver
import aiohttp
IOLoop.configure('tornado.platform.asyncio.AsyncIOLoop')
class MainHandler(tornado.web.RequestHandler):
async def get(self):
r = await aiohttp.get('http://google.com/')
text = await r.text()
self.write("Hello, world, text is: {}".format(text))
if __name__ == "__main__":
app = tornado.web.Application([
(r"/", MainHandler),
])
server = tornado.httpserver.HTTPServer(app)
server.bind(8888, '127.0.0.1')
server.start()
IOLoop.current().start()