龙卷风:如何生成两个请求并在完成时处理结果



我对龙卷风有点迷茫,可以使用一些建议来解决我试图解决的问题。 在处理请求时,我需要向其他服务发出两次调用并处理结果,并在请求完成时返回给客户端,而不是等待它们全部完成。 满足我需求的第一个结果将返回给调用方。

我一直在阅读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循环内部returnbreak(尽管有时这会向有关已开始但从未等待的期货的日志发送垃圾邮件)。

在WaitIterator的文档中有更多例子

最新更新