【发布时间】:2018-11-30 00:17:40
【问题描述】:
我有一个处理程序,代码如下:
class HelloHandler(RequestHandler):
routing_pattern = "/hello"
async def get(self):
url = 'some_url_here'
request = httpclient.HTTPRequest(url=url, streaming_callback=self.on_chunk)
result = await downloader.fetch(request)
print(result)
self.write("done")
@gen.coroutine
def on_chunk(self, chunk):
self.write(chunk)
yield self.flush()
这段代码调用了一个像这样定义的 async def 函数:
async def fetch(request):
future = Future()
await _qin.put(request)
return future
我希望在我的处理程序中,事情会在 await downloader.fetch(request) 行停止,直到我为返回的未来设置一个值。现在这永远不会发生,所以事情应该停在那里。然而,似乎并没有真正期待未来。 print(result) 行显示一个“”,并且事情只是在该行之后加速。我究竟做错了什么 ?我怎样才能让功能停在那里并真正等待未来完成?一个附带问题......我在 on_chunk 方法中所做的是否正确?我想在那里等待刷新,但 streaming_callback 不采用异步函数。
【问题讨论】:
标签: python async-await tornado