Очередь открывается при старте сервиса, а не при импорте модуля
На Windows процессы поднимаются через spawn и заново импортируют app.main. Хранилище задач создавалось на уровне модуля, поэтому каждый новый процесс при старте помечал чужие выполняющиеся задачи как сорванные - все три записи падали с "сервис был перезапущен во время обработки". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
41f3651cc8
commit
91b69ebe06
+9
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user