Mediumasync
Что такое @asynccontextmanager?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
@asynccontextmanager (contextlib) — декоратор для async context manager через async generator. Аналог @contextmanager, но для async/await.
from contextlib import asynccontextmanager
@asynccontextmanager
async def db_session():
conn = await connect() # setup (await)
try:
yield conn # значение = as-переменная
finally:
await conn.close() # cleanup (await)
async with db_session() as conn:
await conn.execute(...)
# Lifespan в FastAPI/Starlette (заменил deprecated startup/shutdown events)
@asynccontextmanager
async def lifespan(app):
# startup
yield
# shutdown
app = FastAPI(lifespan=lifespan)- Применения: async database sessions, async HTTP clients, async locks;
- AsyncExitStack — управление multiple async context managers dynamically;
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.