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

浙公网安备 33010602011771号