Очередь открывается при старте сервиса, а не при импорте модуля
На 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
@@ -257,3 +257,27 @@ class TestProcessPool:
|
||||
assert "не инициализирован" in str(exc)
|
||||
else:
|
||||
raise AssertionError("ожидалась ошибка о неинициализированном воркере")
|
||||
|
||||
|
||||
class TestSpawnSafety:
|
||||
"""На Windows дочерний процесс заново импортирует app.main."""
|
||||
|
||||
def test_importing_main_does_not_open_store(self, tmp_path, monkeypatch):
|
||||
"""Иначе каждый новый процесс объявлял бы чужие задачи сорванными."""
|
||||
import sys
|
||||
import types
|
||||
|
||||
config = tmp_path / "config.toml"
|
||||
config.write_text('[security]\ntoken="t"\n', encoding="utf-8")
|
||||
monkeypatch.setenv("TALKSCORE_ASR_HOME", str(tmp_path))
|
||||
for name in ("sherpa_onnx", "onnx_asr", "onnxruntime"):
|
||||
monkeypatch.setitem(sys.modules, name, types.ModuleType(name))
|
||||
for mod in [m for m in list(sys.modules) if m.startswith("app.")]:
|
||||
del sys.modules[mod]
|
||||
|
||||
import app.config as cfg
|
||||
monkeypatch.setattr(cfg, "BASE_DIR", tmp_path)
|
||||
import app.main as main
|
||||
|
||||
assert main.store is None
|
||||
assert not (tmp_path / "data" / "jobs.db").exists()
|
||||
|
||||
Reference in New Issue
Block a user