From 62ac03fb290e65fc5232efe6d1aea51e03d576f0 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Fri, 18 Oct 2024 00:35:54 +0800 Subject: [PATCH] refactor(lifecycle): add graceful support and remove signal handling --- app/main.py | 3 ++- app/startup/lifecycle.py | 6 ++++++ app/startup/modules_initializer.py | 25 +++---------------------- 3 files changed, 11 insertions(+), 23 deletions(-) diff --git a/app/main.py b/app/main.py index f6de2180..1081ac03 100644 --- a/app/main.py +++ b/app/main.py @@ -20,7 +20,8 @@ from app.db.init import init_db, update_db # uvicorn服务 Server = uvicorn.Server(Config(app, host=settings.HOST, port=settings.PORT, - reload=settings.DEV, workers=multiprocessing.cpu_count())) + reload=settings.DEV, workers=multiprocessing.cpu_count(), + timeout_graceful_shutdown=5)) def start_tray(): diff --git a/app/startup/lifecycle.py b/app/startup/lifecycle.py index 71e0011c..9a6fd09e 100644 --- a/app/startup/lifecycle.py +++ b/app/startup/lifecycle.py @@ -14,18 +14,24 @@ async def lifespan(app: FastAPI): 定义应用的生命周期事件 """ print("Starting up...") + # 启动模块 start_modules(app) + # 初始化路由 init_routers(app) + # 初始化插件 plugin_init_task = asyncio.create_task(init_plugins_async()) try: + # 在此处 yield,表示应用已经启动,控制权交回 FastAPI 主事件循环 yield finally: print("Shutting down...") try: + # 取消插件初始化 plugin_init_task.cancel() await plugin_init_task except asyncio.CancelledError: print("Plugin installation task cancelled.") except Exception as e: print(f"Error during plugin installation shutdown: {e}") + # 清理模块 shutdown_modules(app) diff --git a/app/startup/modules_initializer.py b/app/startup/modules_initializer.py index 1e06892f..d7dc0d3f 100644 --- a/app/startup/modules_initializer.py +++ b/app/startup/modules_initializer.py @@ -1,10 +1,8 @@ -import signal import sys -from types import FrameType from fastapi import FastAPI -from app.core.config import settings, global_vars +from app.core.config import global_vars, settings from app.core.module import ModuleManager from app.utils.system import SystemUtils @@ -89,27 +87,12 @@ def check_auth(): ) -def singal_handle(): - """ - 监听停止信号 - """ - - def stop_event(signum: int, _: FrameType): - """ - SIGTERM信号处理 - """ - print(f"接收到停止信号:{signum},正在停止系统...") - global_vars.stop_system() - - # 设置信号处理程序 - signal.signal(signal.SIGTERM, stop_event) - signal.signal(signal.SIGINT, stop_event) - - def shutdown_modules(_: FastAPI): """ 服务关闭 """ + # 停止信号 + global_vars.stop_system() # 停止模块 ModuleManager().stop() # 停止插件 @@ -159,5 +142,3 @@ def start_modules(_: FastAPI): start_frontend() # 检查认证状态 check_auth() - # 监听停止信号 - singal_handle()