如何使用asyncio并等待可变数量的期货?

时间:2019-06-12 18:44:54

标签: python python-asyncio

我正在尝试将asyncio与我需要一段时间才能运行的方法一起使用。我想用略有不同的输入多次调用相同的方法,并且我不在乎哪个调用首先完成,我只想在所有结果完成后收集所有结果(对asyncio循环来说是主要的选择吗?)这是一些当我知道要调用我的方法多少次时,我一直使用的代码:

async def main():
    loop = asyncio.get_event_loop()
    future1 = loop.run_in_executor(None, myhttpreq, 'US')
    future2 = loop.run_in_executor(None, myhttpreq, 'RU')
    future3 = loop.run_in_executor(None, myhttpreq, 'CN')
    response1 = await future1
    response2 = await future2
    response3 = await future3
    print(response1)
    print(response2)
    print(response3)

通过myhttpreq传递的参数可以看出,此方法之所以需要很长时间是因为它调用了来自世界各地的endpints。我的问题是这样:

说要呼叫的国家/地区列表变化很大,如何生成并等待数量可变的期货?

1 个答案:

答案 0 :(得分:0)

我最终这样做:

async def main2(countries):
loop = asyncio.get_event_loop()
futures = []
for country in countries:
    futures.append(loop.run_in_executor(None, myhttpreq, country))

for future in futures:
    print(await future)

这似乎很蠢吗?