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