如何使 Python tornado 生成分块响应
How to make Python tornado generate chunked response
我的python版本是3.4,我的tornado版本是4.3.My代码是这样的:
import tornado.ioloop
import tornado.web
import tornado.httputil
import tornado.httpserver
class MainHandler(tornado.web.RequestHandler):
def get(self):
body = 'foobar'*10
self.set_header('Transfer-Encoding', 'chunked')
self.write(body)
self.flush()
self.finish()
app = tornado.web.Application([
(r'/chunked', MainHandler),
])
if __name__ == "__main__":
app.listen(8080)
tornado.ioloop.IOLoop.current().start()
这根本行不通,当使用 tornado 服务器时,客户端只是等待块 ends.How 正确生成分块响应?
对 write
的单个调用将在响应中产生单个块。要获得多个块,您必须多次调用 write
,每次都刷新,并且在其间调用 yield
(如果您没有产生任何东西,那么使用块作为响应就没有价值)。
@tornado.gen.coroutine
def get(self):
for i in range(10):
self.write('foobar')
yield self.flush()
我的python版本是3.4,我的tornado版本是4.3.My代码是这样的:
import tornado.ioloop
import tornado.web
import tornado.httputil
import tornado.httpserver
class MainHandler(tornado.web.RequestHandler):
def get(self):
body = 'foobar'*10
self.set_header('Transfer-Encoding', 'chunked')
self.write(body)
self.flush()
self.finish()
app = tornado.web.Application([
(r'/chunked', MainHandler),
])
if __name__ == "__main__":
app.listen(8080)
tornado.ioloop.IOLoop.current().start()
这根本行不通,当使用 tornado 服务器时,客户端只是等待块 ends.How 正确生成分块响应?
对 write
的单个调用将在响应中产生单个块。要获得多个块,您必须多次调用 write
,每次都刷新,并且在其间调用 yield
(如果您没有产生任何东西,那么使用块作为响应就没有价值)。
@tornado.gen.coroutine
def get(self):
for i in range(10):
self.write('foobar')
yield self.flush()