【发布时间】:2013-11-16 12:53:41
【问题描述】:
我正在尝试编写一个 Tornado 请求处理程序,它发出异步 HTTP 请求,并在客户端从异步请求接收数据时将数据返回给客户端。不幸的是,在所有异步 HTTPRequest 完成之前,我无法让 Tornado 向客户端返回任何数据。
我的请求处理程序的演示如下。
类 StreamingHandler(web.RequestHandler): all_requested = False 请求 = [] @web.asynchronous 定义获取(自我): http_client = httpclient.AsyncHTTPClient() self.write('一些开口') big_request = httpclient.HTTPRequest(url='[some_big_request]', streaming_callback=self.on_chunk) small_request = httpclient.HTTPRequest(url='[some_small_request]', streaming_callback=self.on_chunk) self.requests.append(http_client.fetch(big_request, callback=self.on_response_complete)) self.requests.append(http_client.fetch(small_request, callback=self.on_response_complete)) self.all_requested = True def on_chunk(自我,块): self.write('一些块') self.flush() def on_response_complete(自我,响应): if self.all_requested and all(request.done() for request in self.requests): self.write('一些关闭') self.finish()我希望对这个处理程序的 GET 请求最初返回文本“some opening”,然后很快为小请求返回“some chunk”,然后为更大的请求返回“some chunk”(可能多次)请求,在最终返回“关闭”并关闭连接之前。相反,在建立连接后,客户端会等待几秒钟以等待所有请求完成,然后在关闭之前立即接收所有 HTTPResponse。
我将如何从 Tornado 获得我想要的行为?
提前致谢!
【问题讨论】:
标签: python asynchronous tornado