Как заставить торнадо Python генерировать частичный ответ
Моя версия Python 3.4, моя версия торнадо 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()
Это просто не может работать, клиент просто ждет окончания чанка. Как правильно генерировать чанк-ответ при использовании сервера торнадо?
1 ответ
Решение
Один звонок write
приведет к единственному фрагменту в ответе. Чтобы получить несколько кусков, вы должны позвонить write
несколько раз промывайте каждый раз, и yield
между ними (если вы ничего не даете, тогда нет смысла использовать куски для ответа).
@tornado.gen.coroutine
def get(self):
for i in range(10):
self.write('foobar')
yield self.flush()