10

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()
4

2 に答える 2