Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: context manager, async context manager, __enter__, __exit__, __aenter__, __aexit__

Чем отличаются __enter__/__exit__ от __aenter__/__aexit__?

Вопрос проверяет понимание различий между синхронными и асинхронными контекстными менеджерами в Python.

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

Синхронные контекстные менеджеры используют методы __enter__ и __exit__ для управления ресурсами в обычном коде. Асинхронные контекстные менеджеры используют __aenter__ и __aexit__ и предназначены для работы с async with. Основное отличие в том, что асинхронные версии являются корутинами и требуют await.

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

Основное различие

Синхронные контекстные менеджеры реализуются через методы __enter__ и __exit__, которые выполняются синхронно. Асинхронные контекстные менеджеры используют __aenter__ и __aexit__, которые являются корутинами (async def) и требуют использования await.

Пример синхронного контекстного менеджера

class FileManager:
    def __enter__(self):
        print("Открытие файла")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Закрытие файла")

with FileManager():
    print("Работа с файлом")

Пример асинхронного контекстного менеджера

class AsyncFileManager:
    async def __aenter__(self):
        print("Асинхронное открытие файла")
        return self

    async def __aexit__(self, exc_type, exc_val, exc_tb):
        print("Асинхронное закрытие файла")

async def main():
    async with AsyncFileManager():
        print("Работа с файлом")

Где применяется

Асинхронные контекстные менеджеры используются в асинхронном программировании для управления ресурсами, такими как соединения с базами данных, сетевые сокеты или файлы, когда операции ввода-вывода могут блокировать выполнение. Например, библиотека aiofiles предоставляет асинхронные контекстные менеджеры для работы с файлами.

Вывод

Используйте синхронные контекстные менеджеры для обычного кода, а асинхронные — когда работаете с asyncio или другими асинхронными фреймворками, чтобы избежать блокировки event loop.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Python

    Python

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

#context manager

#async context manager

#__enter__

#__exit__

#__aenter__

#__aexit__

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

  • Аватар

    Python Guru

    Sergey Filichkin

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