如何让 Python 龙卷风生成分块响应

use*_*531 0 python tornado httpresponse chunked

我的python版本是3.4,我的tornado版本是4.3。我的代码是这样的:

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()
Run Code Online (Sandbox Code Playgroud)

这根本行不通,客户端只是等待块结束。如何在使用 Tornado 服务器时正确生成分块响应?

Ben*_*ell 5

单个调用write将导致响应中的单个块。要获得多个块,您必须write多次调用,每次刷新,以及yield在两者之间(如果您没有产生任何东西,那么使用块作为响应没有任何价值)。

@tornado.gen.coroutine
def get(self):
    for i in range(10):
        self.write('foobar')
        yield self.flush()
Run Code Online (Sandbox Code Playgroud)