Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+694новые вакансии за сутки·52 494вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 662
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 244
  • Облачные технологии4 749
  • QA вакансии1 736
  • Android1 148
  • Инженер данных800
  • Продакт-менеджер321

Разработка

  • iOS1 092
  • Backend вакансии1 046
  • Fullstack вакансии453
  • AI вакансии391
  • Frontend вакансии376
  • Mobile вакансии27

По стеку

  • Go3 590
  • Java2 153
  • Kotlin942
  • Node.js767
  • Rust544
  • .NET496
  • PHP267
  • C++220
  • C#198

DevOps и инфраструктура

  • Kubernetes2 686
  • Linux-инфраструктура2 117
  • DevOps вакансии1 960
  • Terraform / IaC1 615
  • CI/CD871
  • Мониторинг и Observability742
  • SRE228
  • Кибербезопасность47

Аналитика и данные

  • Аналитик данных495
  • Data Scientist449
  • Бизнес-аналитик351
  • Системный аналитик54

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 835
  • Вакансии в Европе9 341
  • Работа в России3 283
  • Вакансии в Канаде2 140

По формату

  • Удалённые вакансии41 311
  • Релокация в США23 835
  • Гибридная работа4 058
  • Офисная работа2 949

По уровню

  • Senior вакансии20 396
  • Middle вакансии11 620
  • Junior вакансии3 665

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Wise139 вакансий
  • Grab134 вакансии
  • Infobip28 вакансий
  • Adyen23 вакансии
  • Darktrace17 вакансий
  • Spotify15 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме FastAPIВсе вопросы
FastAPIMiddleТеория

Как работают dependencies с yield и как гарантировать cleanup ресурсов?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Dependency с yield работает как контекстный менеджер: код до yield — setup, после — cleanup. FastAPI вызывает cleanup даже при исключениях, передавая их в генератор через athrow(). Используйте try/finally для гарантированного закрытия ресурсов.

Как работают dependencies с yield

Dependency с yield — это генераторная функция, которую FastAPI использует как контекстный менеджер. Код до yield выполняется перед вызовом endpoint, код после — после отправки ответа. Это гарантирует cleanup ресурсов даже при исключениях.

from fastapi import Depends
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine

engine = create_async_engine("postgresql+asyncpg://user:pass@db/mydb")
AsyncSessionLocal = async_sessionmaker(engine, expire_on_commit=False)

async def get_db() -> AsyncSession:
    async with AsyncSessionLocal() as session:
        try:
            yield session          # <-- FastAPI передаёт сессию в endpoint
            await session.commit() # <-- выполняется после успешного ответа
        except Exception:
            await session.rollback()  # <-- откат при любом исключении
            raise

Внутренняя механика

FastAPI оборачивает генераторную dependency в contextlib.asynccontextmanager (для async) или contextlib.contextmanager (для sync). При исключении в endpoint FastAPI вызывает generator.athrow(exc), что позволяет блоку except в dependency получить это исключение.

Цепочки dependencies

async def get_redis():
    client = await aioredis.from_url("redis://redis:6379")
    try:
        yield client
    finally:
        await client.close()  # finally гарантирует закрытие даже при исключении

async def get_cache_service(
    redis = Depends(get_redis),
    db: AsyncSession = Depends(get_db),
):
    service = CacheService(redis=redis, db=db)
    yield service
    # cleanup redis и db выполняется в их собственных dependencies

Cleanup при background tasks

Важно: cleanup dependency выполняется до завершения BackgroundTask. Если фоновая задача использует ресурс из dependency (например, db-сессию), ресурс уже будет закрыт.

@app.post("/report")
async def generate_report(
    background_tasks: BackgroundTasks,
    db: AsyncSession = Depends(get_db),  # сессия закроется ДО выполнения задачи
):
    # Правильно: передавайте данные, а не саму сессию
    report_id = await db.execute(insert(Report).returning(Report.id))
    background_tasks.add_task(process_report, report_id.scalar())  # только ID
    return {"report_id": report_id.scalar()}

Тестирование dependency override

import pytest
from httpx import AsyncClient, ASGITransport
from main import app
from app.api.v1.deps import get_db

@pytest.fixture
async def test_db():
    # тестовая in-memory SQLite или отдельная тестовая БД
    async with test_session() as session:
        yield session

@pytest.mark.asyncio
async def test_create_user(test_db):
    app.dependency_overrides[get_db] = lambda: test_db
    async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
        resp = await client.post("/users", json={"email": "a@b.com"})
    assert resp.status_code == 201
    app.dependency_overrides.clear()

Подводные камни

  • Exception в коде до yield — если исключение произошло до yield, код после yield не выполнится. Ресурс не будет закрыт, если он был открыт до исключения. Используйте try/finally вокруг открытия ресурса.
  • Исключение в блоке finally — если в finally бросается новое исключение, оригинальное теряется. Логируйте ошибки cleanup, не перебрасывайте их.
  • Sync dependency с yield в async endpoint — FastAPI запускает sync generator в threadpool; если внутри используется async-код, будет ошибка «coroutine was never awaited». Используйте async def для async ресурсов.
  • Кеширование dependencies — FastAPI кеширует dependency в рамках одного запроса; если один и тот же Depends используется в двух местах, ресурс создаётся один раз. Это экономит соединения, но может удивить при тестировании.
  • BackgroundTasks + сессия БД — сессия из dependency закрывается до старта фоновой задачи; передавайте только примитивные данные (ID, строки), а не ORM-объекты.
  • Утечка при unhandled exception в middleware — если кастомный middleware перехватывает исключение и не пробрасывает его дальше, FastAPI не вызовет cleanup dependency.

Частые вопросы на собеседовании

  • Как FastAPI использует Pydantic-модели для валидации запросов и ответов?
  • Как интегрировать SQLAlchemy с FastAPI для работы с базой данных?
  • Как реализовать аутентификацию через OAuth2 и JWT-токены в FastAPI?
  • Что такое ASGI и чем FastAPI/Uvicorn отличается от WSGI-серверов?

Типичные ошибки

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

Что проверяет интервьюер

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

Как вы знаете этот вопрос?

Проверить себя по теме FastAPI →

Источники

  • https://fastapi.tiangolo.com/async/
←Предыдущий вопросКак структурировать большое FastAPI-приложение (routers, dependencies, settings)?

Связанные темы

FastAPIfastapi-productionrisk-analysistechnical-depth

Вакансии с этим навыком

  • Junior Fullstack-разработчик (AI-assisted development)
  • Principal Fullstack Developer
  • AI Engineer / Python Developer
  • Python Developer (AI Agents)
  • Python Team Lead