Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: asyncio

Как защитить задачу от отмены (cancel)?

Вопрос объясняет механизмы защиты от принудительной отмены задач.

Короткий ответ

Используйте asyncio.shield() или ловите asyncio.CancelledError для защиты критических операций. Однако полной гарантии нет — событийный цикл может завершиться в любой момент.

Длинный ответ

1. Вариант с shield:

async def critical_operation():
    await asyncio.sleep(5)  # Долгая операция
    return "Важные данные"

async def main():
    shielded = asyncio.shield(critical_operation())
    shielded.cancel()  # Операция продолжит выполняться
    try:
        await shielded
    except asyncio.CancelledError:
        print("Внешняя задача отменена, но операция продолжается")

2. Явная обработка:

async def protected_task():
    try:
        await long_operation()
    except asyncio.CancelledError:
        print("Запрос на отмену проигнорирован")
        await long_operation()  # Продолжаем

Вывод:
shield() полезен для защиты критических секций, но не даёт 100% гарантии.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    1

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#asyncio

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.