TaskGroup в Python 3.11 зависает, если одна задача вызывает исключение – это известная ошибка?Python

Программы на Python
Anonymous
 TaskGroup в Python 3.11 зависает, если одна задача вызывает исключение – это известная ошибка?

Сообщение Anonymous »

В группе задач есть две задачи. Один из них делает рейз, другой должен быть отменен. Это отлично работает в Python 3.12+, но зависает в Python 3.11. Старые версии не поддерживали группы задач.
Известная ли это проблема? Вероятно, они не исправят ошибку в версии 3.11 на данном этапе ее жизненного цикла. Я ищу информацию о том, как избежать, решить или смягчить проблему. На данный момент я обнаружил, что небольшие изменения в коде имеют значение. И похоже, что wait_for играет здесь какую-то роль.

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

import asyncio

ev = asyncio.Event()

async def t1():
try:
while True:
try:
print("Waiting")
await asyncio.wait_for(ev.wait(), 99)
print("Done waiting")
ev.clear()
except TimeoutError:
print("Timeout")
raise
except asyncio.CancelledError:
print("Cancelled -  as expected")
raise

async def t2():
ev.set()
raise RuntimeError()

async def main():
try:
async with asyncio.TaskGroup() as tg:
tg.create_task(t1())
tg.create_task(t2())
except* RuntimeError:
print("RuntimeError -  as expected")

if __name__ == "__main__":
asyncio.run(main())
Обычный вывод:

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

Waiting
Done waiting
Waiting
Cancelled -  as expected
RuntimeError -  as expected
Неправильный вывод в Python 3.11:

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

Waiting
Done waiting
Waiting
А затем зависает до тех пор, пока не будет дважды нажата комбинация Ctrl-C.


Подробнее здесь: https://stackoverflow.com/questions/797 ... it-a-known

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