Выбор ответа Senior SQLAlchemy 2.0 обновлено
Одна Session на несколько потоков
Вопрос
Почему нельзя использовать один объект Session из нескольких потоков или одну AsyncSession из нескольких задач одновременно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Session не потокобезопасна: identity map, транзакция и соединение перемешаются. Session хранит изменяемое состояние: список новых и изменённых объектов, текущую транзакцию, занятое соединение.
Варианты ответа
- Это разрешено: Session внутри защищает состояние блокировками
- Это разрешено только для чтения, а запись нужно сериализовать
- Session не потокобезопасна: identity map, транзакция и соединение перемешаютсяправильный ответ
- SQLAlchemy автоматически создаёт отдельную сессию на каждый поток
Разбор
Session хранит изменяемое состояние: список новых и изменённых объектов, текущую транзакцию, занятое соединение. Параллельное использование приводит к перемешанным запросам и непредсказуемым ошибкам. Правильно: одна сессия на запрос, задачу или поток. Отдельную сессию на поток даёт только scoped_session, который надо настроить явно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.