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

2024-04-24 05:54:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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传递的参数可以看出,此方法花费如此长的时间是因为它调用了来自世界各地的EndPint。我的问题是:

假设我想打电话给的国家名单变化很大,我如何生成并等待可变数量的未来


Tags: 方法runinnoneloopasyncioawaitprint
1条回答
网友
1楼 · 发布于 2024-04-24 05:54:14

我最终做了这样的事:

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)

这看起来很愚蠢吗

相关问题 更多 >