Back to questions
Junior — Middle
79
Как различаются реализации асинхронного и синхронного контекстных менеджеров в Python?
Answer from AI
sobes.tech AI
Синхронный контекстный менеджер реализует методы __enter__ и __exit__, которые вызываются при входе и выходе из блока with. Он используется для управления ресурсами в синхронном коде.
Асинхронный контекстный менеджер реализует методы __aenter__ и __aexit__, которые возвращают awaitable объекты и используются с async with в асинхронном коде. Это позволяет корректно управлять ресурсами, которые требуют асинхронного освобождения или инициализации.
Пример синхронного менеджера:
class SyncManager:
def __enter__(self):
print('Enter sync')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('Exit sync')
with SyncManager():
print('Inside sync')
Пример асинхронного менеджера:
class AsyncManager:
async def __aenter__(self):
print('Enter async')
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
print('Exit async')
import asyncio
async def main():
async with AsyncManager():
print('Inside async')
asyncio.run(main())
Ключевое различие — методы и синтаксис (with vs async with), позволяющие корректно работать с асинхронными операциями внутри менеджера.