@habrdima

Можно ли узнать какая корутина вызвала ошибку в asyncio.gather?

Есть такой код
import asyncio

async def f1():

    await asyncio.sleep(3)
    return 1
async def f2():

    await asyncio.sleep(1)
    raise Exception()

    return 2
async def main():

    aws = await asyncio.gather(
        *{f1(),
         f2()
          }, return_exceptions=True
    )
    print(aws)
asyncio.run(main())\

выовод: [Exception(), 1]


выполняются 2 корутины и одна возвращает ошибку, но как мне узнать которая?

Важно, корутины могут быть написаны не мной, а значит нужно что бы был какой то нативный способ если он есть
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 2
Lord_of_Rings
@Lord_of_Rings
Python developer
Глазами посмотреть на код и
увидеть
что f2()
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Вообще-то gather() возвращает исключения и результаты в том же порядке, в котором переданы корутины. Всегда.
Но ты сам себе выстрелил в ногу вот этим: *{f1(), f2()}
Ты указал литерал множества, а это не упорядоченная коллекция. Так что в каком порядке были переданы корутины - хз.
Положи их в кортеж или в список перед отдачей в gather(), и проблема уйдёт - элемент выходного списка с индексом i будет соответствовать корутине с индексом i в исходном кортеже/списке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы