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

时间:2016-03-04 16:31:40

标签: python tornado

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

我一直在阅读有关tornado.gen,coroutines和future的内容,我对这将会有什么用处非常困惑。我确实看到我需要使用tornado.gen.WaitIterator()来获得期货结果。我不知道如何提出两个外部请求以及如何将它们放在一起。

1 个答案:

答案 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循环内部breakasync for(尽管有时这会扼杀有关已启动但未曾等待的未来的日志)。

WaitIterator's docs

中有更多示例