LINUX.ORG.RU

Не сильно вчитывался в код, но заметил with suppress(Exception): и future.cancel(). Подозреваю что ты таким образом перехватываешь asyncio.CancelledError. Попробуй сделать

try:
    ...
except asyncio.CancelledError:
    raise
except Exception:
    pass
grazor ★★
()
Ответ на: комментарий от grazor

Что то подбное пробывал, и твое пробывал. Не помогает. Избавился от RuntimeError: https://stackoverflow.com/questions/32598231/asyncio-runtimeerror-event-loop-is-closed

Сейчас возвращается None, и переодически Task was destroyed but it is pending!

вот последний код:

https://pastebin.com/piFsBmCF

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

bikes
() автор топика
Ответ на: комментарий от bikes

На самом деле тебе рано в асинхронщину, да и проблема у тебя совсем в другом, ты выбрал стратегию первый выполненный. А это значит что все исключения в тасках всегда (как правило) первые, если ты прям всеми силами хочешь подавлять всё в тасках, то после того как первый завершится с проблемой, тебе точно для получения ответа надо подождать остальных.

Пример

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)))
itn ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.