This commit is contained in:
2026-06-11 13:02:20 +08:00
parent ab9842a140
commit 781ebdd348
8 changed files with 140 additions and 45 deletions
+8 -3
View File
@@ -3,6 +3,7 @@ import signal
import sys
from loguru import logger
from src.browser.manager import get_browser_manager
from src.config.settings import get_settings
from src.config.accounts import load_accounts_config
from src.notifications.service import NotificationService
@@ -37,12 +38,15 @@ async def main() -> None:
logger.critical(f"由于配置错误,守护进程启动失败: {e}")
sys.exit(1)
# 3. 实例化核心任务分发器与 Stream 监听器
# 3. 预热浏览器:为所有已配置账号提前启动常驻浏览器上下文,任务到达时即开即用
await get_browser_manager().prewarm()
# 4. 实例化核心任务分发器与 Stream 监听器
dispatcher = TaskDispatcher()
stream_listener = RedisStreamListener(dispatcher)
delay_listener = RedisZSetDelayListener(dispatcher)
# 4. 优雅停机信号处理 (跨平台支持)
# 5. 优雅停机信号处理 (跨平台支持)
loop = asyncio.get_running_loop()
def shutdown_handler(sig_name: str) -> None:
@@ -62,7 +66,7 @@ async def main() -> None:
else:
logger.debug("运行于 Windows 平台。跳过系统信号注册,将直接捕获 KeyboardInterrupt。")
# 5. 启动消息监听消费主循环
# 6. 启动消息监听消费主循环
try:
stream_task = asyncio.create_task(stream_listener.listen())
delay_task = asyncio.create_task(delay_listener.listen())
@@ -76,6 +80,7 @@ async def main() -> None:
await asyncio.gather(
stream_listener.stop(),
delay_listener.stop(),
get_browser_manager().close_all(),
get_redis_manager().close(),
return_exceptions=True,
)