Как использовать asyncio и ожидать переменное количество фьючерсов? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь использовать 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, причина того, что этот метод занимает так много времени, заключается в том, что он вызывает конечные точки со всего мира. У меня вопрос такой:

Скажем, список стран, которые я хочу назвать, довольно переменный, как я могу генерировать и ожидать переменное количество фьючерсов?

1 Ответ

0 голосов
/ 12 июня 2019

Я закончил тем, что сделал это:

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)

Кажется ли это глупым?

...