Очередь открывается при старте сервиса, а не при импорте модуля

На Windows процессы поднимаются через spawn и заново импортируют app.main.
Хранилище задач создавалось на уровне модуля, поэтому каждый новый процесс
при старте помечал чужие выполняющиеся задачи как сорванные - все три
записи падали с "сервис был перезапущен во время обработки".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-08-15 23:29:38 +05:00
co-authored by Claude Opus 5
parent 41f3651cc8
commit 91b69ebe06
3 changed files with 34 additions and 2 deletions
+9 -1
View File
@@ -25,7 +25,12 @@ log = logging.getLogger("talkscore-asr")
settings: Settings = load_settings()
allowlist = parse_allowlist(settings.allow_ips)
store = JobStore(settings.data_dir / "jobs.db")
# Хранилище создаётся не здесь, а при старте сервиса. На Windows процессы
# поднимаются через spawn и заново импортируют этот модуль: если бы очередь
# открывалась на уровне модуля, каждый новый процесс при старте помечал бы
# чужие выполняющиеся задачи как сорванные.
store: JobStore = None # type: ignore[assignment]
def make_pipeline() -> Pipeline:
"""Своя копия моделей на каждого воркера: они не рассчитаны на общий доступ."""
return Pipeline(
@@ -118,7 +123,10 @@ def _make_pool(count: int):
@asynccontextmanager
async def lifespan(app: FastAPI):
global store
(settings.data_dir / "uploads").mkdir(parents=True, exist_ok=True)
store = JobStore(settings.data_dir / "jobs.db")
try:
pipeline.warmup()
_state["ready"] = True