我正在尝试将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。我的问题是这样:
说要呼叫的国家/地区列表变化很大,如何生成并等待数量可变的期货?
答案 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)
这似乎很蠢吗?