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-03-07 17:39:21 +08:00 1
在同步场景下会自动调用 self.finish(),你可以试试加上 tornado.web.asynchronous 装饰器,再去掉 self.flush() 运行
|
2
calease 2016-03-08 12:21:26 +08:00
用不用 async 都不用 flush
如果返回大文件要经常 flush 不然客户端得等到你所有数据都写入完毕了才能开始下载 |
3
eightqueen OP @calease 还是不明白为什么不用 flush ?不 flush ,数据仍然在缓冲区,客户端怎么可能收到?
|
4
calease 2016-03-09 00:37:31 +08:00 via iPhone
@eightqueen
handler 运行结束时 tornado 会自动帮你 finish ,如果你没有手动 finish 过。 finish 的时候会调用 flush 把所有写的内容提交。 我第一句只是说 async 和 flush 没有关联,不是 async 了就一定要手动 flush 。 |
5
eightqueen OP @calease 谢谢
|