
from tornado.ioloop import IOLoop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") self.flush() def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(1234) IOLoop.current().start() 很简单的一个 hello world 程序,我把 flush 去掉,照样运行正常。
1 yangtukun1412 2016 年 3 月 7 日 在同步场景下会自动调用 self.finish(),你可以试试加上 tornado.web.asynchronous 装饰器,再去掉 self.flush() 运行 |
2 calease 2016 年 3 月 8 日 用不用 async 都不用 flush 如果返回大文件要经常 flush 不然客户端得等到你所有数据都写入完毕了才能开始下载 |
3 eightqueen OP @calease 还是不明白为什么不用 flush ?不 flush ,数据仍然在缓冲区,客户端怎么可能收到? |
4 calease 2016 年 3 月 9 日 via iPhone @eightqueen handler 运行结束时 tornado 会自动帮你 finish ,如果你没有手动 finish 过。 finish 的时候会调用 flush 把所有写的内容提交。 我第一句只是说 async 和 flush 没有关联,不是 async 了就一定要手动 flush 。 |
5 eightqueen OP @calease 谢谢 |