Я хочу использовать торнадо с асинхронными библиотеками, такими как aiohttp и собственные сопрограммы python 3.5, и, похоже, это поддерживается в последней версии торнадо (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()