合并外部维护版本并同步自动每日功能

This commit is contained in:
2026-09-28 13:55:07 +08:00
parent 2d81615f78
commit 9040bcb5e5
59 changed files with 3176 additions and 179 deletions
+53 -1
View File
@@ -1,7 +1,8 @@
import asyncio
import logging
import os
import unittest
from unittest.mock import patch
from unittest.mock import AsyncMock, patch
from app.faster_qwen_worker import (
DEFAULT_CPU_AFFINITY_COUNT,
@@ -338,5 +339,56 @@ class FasterQwenWorkerTests(unittest.TestCase):
client.close()
class DegradeRebuildTests(unittest.IsolatedAsyncioTestCase):
"""合成耗时超阈值 → 后台自动重建 worker 的退化自愈逻辑。"""
def _make_engine(self):
from app.danmu_queue import FasterQwen3TTSEngine
engine = FasterQwen3TTSEngine.__new__(FasterQwen3TTSEngine)
engine.logger = logging.getLogger("test-degrade-rebuild")
engine._degrade_rebuild_threshold_ms = 25000
engine._degrade_rebuild_cooldown_sec = 1800
engine._last_degrade_rebuild_at = 0.0
engine._degrade_rebuild_task = None
engine.restart_worker = AsyncMock(return_value=True)
return engine
async def test_slow_synthesis_triggers_rebuild(self):
engine = self._make_engine()
engine._maybe_schedule_degrade_rebuild(40000)
await asyncio.sleep(0)
engine.restart_worker.assert_awaited_once_with(reason="合成退化自愈")
async def test_fast_synthesis_does_not_rebuild(self):
engine = self._make_engine()
engine._maybe_schedule_degrade_rebuild(8000)
await asyncio.sleep(0)
engine.restart_worker.assert_not_awaited()
async def test_cooldown_prevents_repeat_rebuild(self):
engine = self._make_engine()
engine._maybe_schedule_degrade_rebuild(40000)
await asyncio.sleep(0)
engine.restart_worker.reset_mock()
# 冷却期内的再次超阈值不重复重建
engine._maybe_schedule_degrade_rebuild(50000)
await asyncio.sleep(0)
engine.restart_worker.assert_not_awaited()
async def test_inflight_task_not_duplicated(self):
engine = self._make_engine()
async def slow_rebuild(reason=""):
await asyncio.sleep(0.05)
engine.restart_worker = slow_rebuild
engine._maybe_schedule_degrade_rebuild(40000)
first_task = engine._degrade_rebuild_task
engine._maybe_schedule_degrade_rebuild(40000)
self.assertIs(engine._degrade_rebuild_task, first_task)
await first_task
if __name__ == "__main__":
unittest.main()