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

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM