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

+1 830новых вакансий за сутки·91 092вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 095
  • Облачные технологии14 051
  • QA вакансии3 444
  • Backend вакансии2 068
  • Инженер данных1 788
  • Продакт-менеджер1 248

Разработка

  • Android1 861
  • iOS1 696
  • Fullstack вакансии965
  • AI вакансии945
  • Frontend вакансии734
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 537
  • Node.js2 013
  • .NET1 704
  • Kotlin1 619
  • Rust1 456
  • C#703
  • PHP680
  • C++566

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

  • Kubernetes7 740
  • DevOps вакансии6 038
  • Linux-инфраструктура5 481
  • Terraform / IaC4 255
  • CI/CD3 214
  • Мониторинг и Observability1 775
  • SRE565
  • Кибербезопасность445

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

  • Data Scientist1 121
  • Бизнес-аналитик930
  • Аналитик данных838
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 023
  • Вакансии в Европе23 282
  • Вакансии в Канаде4 294
  • Работа в России3 910

По формату

  • Удалённые вакансии72 436
  • Релокация в США43 022
  • Гибридная работа12 399
  • Офисная работа7 085

По уровню

  • Senior вакансии41 615
  • Middle вакансии20 102
  • Junior вакансии6 553

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Что такое scoped_session и зачем он используется в веб-фреймворках, таких как Flask?

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

scoped_session — реестр, возвращающий одну сессию на поток (или другой scope). Используется во Flask/WSGI для доступа к 'текущей' сессии без передачи явно. В async-приложениях не применяется.

Как работает

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

engine = create_engine("postgresql+psycopg2://user:pass@localhost/db")
SessionFactory = sessionmaker(bind=engine)

# scoped_session оборачивает фабрику
db_session = scoped_session(SessionFactory)

# В любом месте приложения — получаем ту же сессию для текущего потока
def get_users():
    return db_session.query(User).all()   # legacy-API, но работает

def create_user(name: str):
    user = User(name=name)
    db_session.add(user)
    db_session.commit()

# В конце запроса — обязательно убираем сессию из реестра
def teardown():
    db_session.remove()   # закрывает сессию и убирает из registry

scoped_session в SQLAlchemy

scoped_session — это реестр сессий, который возвращает одну и ту же сессию для одного и того же контекста (по умолчанию — потока). Это позволяет нескольким частям приложения обращаться к «текущей» сессии, не передавая её явно.

Использование в Flask

from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

app = Flask(__name__)
engine = create_engine(app.config["DATABASE_URL"])
db_session = scoped_session(sessionmaker(bind=engine))

@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()   # критически важно — иначе соединения утекут

@app.route("/users")
def list_users():
    return [{"id": u.id} for u in db_session.query(User).all()]

Кастомный scope (не по потоку)

import threading

# По умолчанию scope = threading.get_ident()
# Можно передать собственную функцию — например, ID запроса
from contextvars import ContextVar

_request_id: ContextVar[int] = ContextVar("request_id")

def request_scope() -> int:
    return _request_id.get()

db_session = scoped_session(SessionFactory, scopefunc=request_scope)

scoped_session vs sessionmaker в современном коде

  • Flask + WSGI (многопоточный) → scoped_session по-прежнему актуален.
  • FastAPI / async → используйте AsyncSession через dependency injection (Depends); scoped_session там не нужен.
  • Flask-SQLAlchemy 3.x управляет сессией сам через app.teardown_appcontext.

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

  • Забыть db_session.remove(): сессия не закрывается, соединение с БД висит. В долгоживущих потоках это приводит к исчерпанию пула.
  • Многопоточность без scoped_session: одна сессия не безопасна для нескольких потоков — операции над объектами corrupted state.
  • scoped_session в async: scoped_session использует threading.get_ident по умолчанию — в asyncio все корутины выполняются в одном потоке, поэтому разные запросы получат одну сессию. Это критическая ошибка.
  • Прокси-интерфейс: db_session — прокси, который делегирует к реальной сессии. Его можно передавать в функции, но нельзя сохранять результат db_session() и использовать долго.
  • remove() vs close(): close() закрывает сессию, но оставляет её в реестре. remove() закрывает и удаляет из реестра — следующий вызов создаст новую.

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

  • Как решить проблему N+1 запросов в SQLAlchemy с помощью selectinload или joinedload?
  • Как работает Session в SQLAlchemy и что такое паттерн Unit of Work?
  • Как делать zero-downtime миграции с Alembic и SQLAlchemy models?
  • Что такое Engine в SQLAlchemy и как работает пул соединений?

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

  • Описывать scoped session только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом SQLAlchemy и реальной эксплуатацией.

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

  • Объясняет scoped session через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

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

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

Источники

  • https://docs.sqlalchemy.org/en/20/orm/session_basics.html
←Предыдущий вопросКак реализовать soft deletes в SQLAlchemy?Следующий вопрос→Как эффективно пагинировать результаты в SQLAlchemy — `offset()` и `limit()` vs keyset pagination?

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

SQLAlchemydatabase-designtechnical-reasoning

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

  • Python developer