"""Process-level sync engine for Celery task modules. Each task module used to call ``create_engine(...)`` on every invocation, which leaked engines (and Postgres connections) — high-fire-rate tasks like ``import_media_file`` would exhaust ``max_connections`` within minutes during a bulk migration. This module owns one engine per process. Celery prefork forks before any task runs, so each worker process lazily initializes its own engine on the first task and reuses it for the rest of its life. """ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from ..config import get_config _ENGINE = None _SESSIONMAKER = None def sync_session_factory(): """Return a process-wide ``sessionmaker`` bound to a single engine.""" global _ENGINE, _SESSIONMAKER if _SESSIONMAKER is None: cfg = get_config() _ENGINE = create_engine( cfg.database_url_sync, future=True, pool_pre_ping=True, pool_size=5, max_overflow=5, pool_recycle=300, ) _SESSIONMAKER = sessionmaker(_ENGINE, expire_on_commit=False) return _SESSIONMAKER def get_sync_engine(): """The process-wide sync Engine — for raw work that needs a connection directly (e.g. AUTOCOMMIT VACUUM, which can't run inside a transaction).""" sync_session_factory() # ensure _ENGINE is initialized return _ENGINE