Сопрограммы в aws отменяются в asyncio.gather(*aws, return_Exceptions=False) при возникновении исключения.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сопрограммы в aws отменяются в asyncio.gather(*aws, return_Exceptions=False) при возникновении исключения.

Сообщение Anonymous »

Мой вопрос из этого поста. Я опишу это здесь.
У меня есть следующий код Python:

Код: Выделить всё

import asyncio, time

async def fn1(x):
await asyncio.sleep(3)
print(f"fn1 is called with x={x}")
return "fn1 SUCCESS"

async def fn2(y):
await asyncio.sleep(2)
print(f"fn2 is called with y={y}")
raise asyncio.TimeoutError()
print(y, '*'*10)
return "fn2 SUCCESS"

async def main():
print("start:",time.ctime())
result = ['No results']
try:
result = await asyncio.gather(
fn1("fn1"),
fn2("fn2"),
return_exceptions=False,
# return_exceptions=True,
)
except Exception as e:
print('e:', type(e), str(e))
print("end:",time.ctime())
print(result)

asyncio.run(main())
Вот какой результат я получил:

Код: Выделить всё

start: Mon Sep 30 17:25:28 2024
fn2 is called with y=fn2
e: 
end: Mon Sep 30 17:25:30 2024
['No results']
Согласно ожидаемому asyncio.gather(*aws, return_Exceptions=False)¶,

If return_Exceptions имеет значение False (по умолчанию), первое возникшее исключение
немедленно распространяется на задачу, ожидающую метода сбора(). Другие ожидаемые объекты в последовательности aws не будут отменены и продолжат выполняться.

Но это противоречит результату Я получил. Почему сопрограмма fn1("fn1") не завершает работу? Если она завершает работу, строка print(f"fn1 вызывается с x={x}") должен его распечатать.
Затем я внес простое изменение в fn1, где время «сна» короче:

Код: Выделить всё

async def fn1(x):
await asyncio.sleep(3-1)
print(f"fn1 is called with x={x}")
return "fn1 SUCCESS"
В это время сопрограмма fn1 завершает работу:

Код: Выделить всё

start: Mon Sep 30 17:30:29 2024
fn1 is called with x=fn1
fn2 is called with y=fn2
e: 
end: Mon Sep 30 17:30:31 2024
['No results']
Для меня это неожиданно! Поведение здесь, похоже, не соответствует документу о том, что «Другие ожидаемые объекты в последовательности aws не будут отменены и будут продолжать выполняться». Можете ли вы объяснить, почему?

Подробнее здесь: https://stackoverflow.com/questions/790 ... tions-fals
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»