Практикум: кто управляет сессией¶
Нужен работающий Docker. Скрипт создаёт и удаляет собственный контейнер PostgreSQL 17.
Выполните команду из docs/blog/lab/2026-09-07-stop-passing-asyncsession-everywhere
в клоне репозитория. Соседний каталог 2026-09-07-unit-of-work-sqlalchemy-2
тоже нужен: оттуда берутся модели, функции статьи и закреплённые зависимости.
Скрипт выводит версию PostgreSQL (17.11 в проверенном запуске). Он проверяет, что создание сессии оставляет пул свободным, первый запрос занимает соединение, а закрытие сессии возвращает его.
Вместо HTTP API доставки используется управляемое асинхронное ожидание. Два запроса ждут внутри транзакций и занимают пул из двух соединений; третий получает таймаут пула. Перенос того же ожидания до транзакции оставляет соединения свободными. Проверяются занятые соединения и сохранённые заказы с событиями; HTTP-сервера и измерения пропускной способности здесь нет.
Скрипт также показывает результат двух одновременных запросов через одну сессию.
Неподдерживаемое использование может пройти без ошибки в отдельном запуске,
поэтому конкретное исключение не требуется. До освобождения ресурсов обе задачи
дожидаются завершения. Правильный вариант использует функцию с TaskGroup
из order_flow.py: шесть независимых заказов должны получить шесть разных сессий,
сохранить шесть пар из заказа и события и вернуть все соединения.
Успешный запуск завершается строкой PASS: session and pool scenarios.