Voglio usare il tornado con le librerie asyncio come cioutine aiohttp e nativo di Python 3.5, e sembra essere supportato nell'ultima versione di tornado (4.3). Tuttavia quando lo si utilizza nel ciclo di eventi del tornado, il gestore della richiesta si blocca indefinitamente. Quando non si utilizza aiohttp (ovvero senza le righe r = await aiohttp.get('http://google.com/')
e text = await r.text()
di seguito), il gestore richieste procede normalmente.Uso del tornado con aiohttp (o altre librerie basate su asyncio)
mio codice di prova è la seguente:
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()