我对龙卷风有点迷茫,可以使用一些建议来解决我试图解决的问题。 在处理请求时,我需要向其他服务发出两次调用并处理结果,并在请求完成时返回给客户端,而不是等待它们全部完成。 满足我需求的第一个结果将返回给调用方。
我一直在阅读tornado.gen,协程和期货,并且对什么对此有效感到非常困惑。 我确实看到我需要使用 tornado.gen.WaitIterator() 来获得期货的结果。 我不确定如何提出两个外部请求以及如何将它们放在一起。
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.
如果您只想处理第一个结果,则可以从async for
循环内部return
或break
(尽管有时这会向有关已开始但从未等待的期货的日志发送垃圾邮件)。
在WaitIterator的文档中有更多例子