我对Tornado有点失落,可以使用一些建议来解决我想要解决的问题。在处理请求时,我需要向其他服务发出两个调用并处理结果,并在请求完成时返回到客户端,而不是等待它们全部完成。满足我需求的第一个结果将返回给调用者。
我一直在阅读有关tornado.gen,coroutines和future的内容,我对这将会有什么用处非常困惑。我确实看到我需要使用tornado.gen.WaitIterator()来获得期货结果。我不知道如何提出两个外部请求以及如何将它们放在一起。
答案 0 :(得分:1)
from tornado import gen, httpclient
async def foo():
client = httpclient.AsyncHTTPClient()
waiter = gen.WaitIterator(client.fetch(url1), client.fetch(url2))
async for resp in waiter:
# Do something with resp.
# waiter.current_index tells you which request this is.
如果您只想处理第一个结果,可以return
循环内部break
或async for
(尽管有时这会扼杀有关已启动但未曾等待的未来的日志)。