@
Trim21 不懂求解。
from tornado.web import RequestHandler
from tornado import gen
import tornado.ioloop
class IndexHandler(RequestHandler):
def get(self):
self.write('this is index')
class BlockingHandler(RequestHandler):
async def get(self):
result = await self.dosomething()
self.write(result)
async def dosomething(self):
# 如果是其他处理函数或者逻辑,要保证函数是协程
await gen.sleep(20)
return 'block end'
app = tornado.web.Application([
(r"/index", IndexHandler),
(r"/blocking", BlockingHandler)
])
if __name__ == "__main__":
app.listen(80)
tornado.ioloop.IOLoop.instance().start()
那 async/await 用在 tornado6 上有啥作用呢?一定要 asyncio 内包装的函数才有效。但 IOLoop 已经用 epoll 实现网络 io 复用了。实际应用中,堵塞的不都是磁盘 io 么。那这么做的目的又是啥呢