Назад к вопросам
Middle+
433
questionbank
Чем асинхронный контекстный менеджер отличается от синхронного?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Асинхронный контекстный менеджер используется в асинхронных функциях (async def) и позволяет управлять асинхронными ресурсами. Он предоставляет методы __aenter__ и __aexit__, которые являются сопрограммами и могут использовать await.
Синхронный контекстный менеджер используется в обычных функциях (def) и управляет синхронными ресурсами. Он предоставляет методы __enter__ и __exit__, которые являются обычными функциями и не могут использовать await.
Основное отличие — возможность выполнения асинхронных операций (await) в методах __aenter__ и __aexit__, что недоступно в синхронных __enter__ и __exit__.
Пример синхронного:
// Пример синхронного контекстного менеджера
class SyncResource:
def __enter__(self):
print("Синхронный ресурс открыт")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Синхронный ресурс закрыт")
// Использование синхронного
with SyncResource():
print("Работа с синхронным ресурсом")
Пример асинхронного:
// Пример асинхронного контекстного менеджера
import asyncio
class AsyncResource:
async def __aenter__(self):
print("Асинхронный ресурс открыт")
await asyncio.sleep(0.1) // Асинхронная операция
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
print("Асинхронный ресурс закрыт")
await asyncio.sleep(0.1) // Асинхронная операция
// Использование асинхронного в асинхронной функции
async def use_async_resource():
async with AsyncResource():
print("Работа с асинхронным ресурсом")
// Запуск асинхронной функции
asyncio.run(use_async_resource())