tornado中使用python3原生事件循环asyncio

如果使用tornado自带的事件循环,那么许多基于asyncio的第三方包可能用不了,比如aioredis,tornado中使用asyncio的两种方式:

一、第一种方式是通过 AsyncIOMainLoop,但必须显示的调用asyncio的事件循环

from tornado.platform.asyncio import AsyncIOMainLoop
import asyncio


def main():
    AsyncIOMainLoop().install()
 
    port = os.environ.get("PORT", 8080)
    app = Application([
        url(r"/", MainHandler),
        (r'/ws', WSHandler),
        (r'/static/(.*)', StaticFileHandler, {'path': "."})
    ])
    print("Starting server at port: %s" % port)
    app.listen(port)
    asyncio.get_event_loop().run_forever()

二、第二种比较适合tornado风格创建事件循环的方式,可读性更强

from tornado.ioloop import IOLoop


class MainHandler(tornado.web.RequestHandler):
    async def get(self):
        await go()
        self.write("Hello, world")


def make_app():
    IOLoop.configure('tornado.platform.asyncio.AsyncIOLoop')
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    IOLoop.instance().start()

  

原文地址:https://www.cnblogs.com/liown/p/9927879.html