Есть задача обрабатывать некоторое количество долгих http запросов (20-30 сек). Как только будет получен ответ или наступит таймаут, необходимо снова выполнить запрос не дожидаясь остальных.
Мой код:
async def get(key):
url = f"https://site.com?key={key}"
async with aiohttp.ClientSession() as session:
async with session.get(url, timeout=20) as response:
return await response.json()
coroutines = [get(key1), get(key1), get(key3)]
async def main():
for task in asyncio.as_completed(coroutines):
resp = await task
print(f'resp: {resp}')
Могу ли я при завершении одной из задач как-то обновить содержимое генератора asyncio.as_completed(coroutines) не останавливая остальные задачи в нем?
В результате я хотел бы получить бесконечный цикл, который будет повторять каждый запрос, как только он будет выполнен.
Содержимое списка coroutines не постоянно. В любой момент времени могут появится новые key или устареть имеющиеся
Возможно я выбрал не верный путь для этого.