Как предотвратить отмену всех задач Python3.11 TaskGroup ⇐ Python
Как предотвратить отмену всех задач Python3.11 TaskGroup
Я только что обнаружил новые функции Python 3.11, такие как ExceptionGroup и TaskGroup, и меня смутило следующее поведение TaskGroup: если одна или несколько задач внутри группы терпят неудачу, все остальные обычные задачи отменяются, и у меня нет шансов изменить это поведение Пример:
async def f_error(): поднять ValueError() асинхронная защита f_normal(arg): печать('начало', арг) ожидайте asyncio.sleep(1) печать('окончание', арг) асинхронно с asyncio.TaskGroup() как tg: tg.create_task(f_normal(1)) tg.create_task(f_normal(2)) tg.create_task(f_error()) # начиная с 1 # начиная с 2 #---------- #< отслеживание ошибки здесь > В приведенном выше примере я не могу напечатать «окончание 1» и «окончание 2». Между тем, будет очень полезно иметь что-то вроде опции asyncio.gather(return_Exceptions=True), чтобы не отменять оставшиеся задачи при возникновении ошибки.
Вы можете сказать: «Просто не используйте TaskGroup, если вы не хотите такого поведения отмены», но ответ будет таким: я хочу использовать новую функцию группы исключений, и она строго привязана к TaskGroup
>
Итак, вопросы:
[*]Могу ли я каким-то образом использовать группы исключений в asyncio без этой политики отмены «все или ничего» в TaskGroup? [*]Если на предыдущий вопрос ответ «НЕТ», то почему разработчики Python исключили возможность отключения отмены в TaskGroup API?
Я только что обнаружил новые функции Python 3.11, такие как ExceptionGroup и TaskGroup, и меня смутило следующее поведение TaskGroup: если одна или несколько задач внутри группы терпят неудачу, все остальные обычные задачи отменяются, и у меня нет шансов изменить это поведение Пример:
async def f_error(): поднять ValueError() асинхронная защита f_normal(arg): печать('начало', арг) ожидайте asyncio.sleep(1) печать('окончание', арг) асинхронно с asyncio.TaskGroup() как tg: tg.create_task(f_normal(1)) tg.create_task(f_normal(2)) tg.create_task(f_error()) # начиная с 1 # начиная с 2 #---------- #< отслеживание ошибки здесь > В приведенном выше примере я не могу напечатать «окончание 1» и «окончание 2». Между тем, будет очень полезно иметь что-то вроде опции asyncio.gather(return_Exceptions=True), чтобы не отменять оставшиеся задачи при возникновении ошибки.
Вы можете сказать: «Просто не используйте TaskGroup, если вы не хотите такого поведения отмены», но ответ будет таким: я хочу использовать новую функцию группы исключений, и она строго привязана к TaskGroup
>
Итак, вопросы:
[*]Могу ли я каким-то образом использовать группы исключений в asyncio без этой политики отмены «все или ничего» в TaskGroup? [*]Если на предыдущий вопрос ответ «НЕТ», то почему разработчики Python исключили возможность отключения отмены в TaskGroup API?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение