合并外部维护版本并同步自动每日功能
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user