Не сильно вчитывался в код, но заметил with suppress(Exception): и future.cancel(). Подозреваю что ты таким образом перехватываешь asyncio.CancelledError. Попробуй сделать
кто знает как пофиксить? Смысл в том, что нужно выбрать первый успешный ответ от веб-сервера. Если убрать не правильный домен, то все работает. Но хочется не наступить на грабли заранее.
На самом деле тебе рано в асинхронщину, да и проблема у тебя совсем в другом, ты выбрал стратегию первый выполненный. А это значит что все исключения в тасках всегда (как правило) первые, если ты прям всеми силами хочешь подавлять всё в тасках, то после того как первый завершится с проблемой, тебе точно для получения ответа надо подождать остальных.
Пример
import asyncio
import aiohttp
SERVICES = [
'https://httpbin.org/get',
#'https://qwe.qwe',
]
async def fetch(service):
async with aiohttp.request('GET', service) as response:
return await response.json()
async def main(services):
done, _ = await asyncio.wait(
fs=[fetch(service) for service in services],
return_when=asyncio.FIRST_COMPLETED
)
return done.pop().result()
print(asyncio.run(main(SERVICES)))