Как заставить торнадо 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()
Другие вопросы по тегам