diff --git a/app/startup/command_initializer.py b/app/startup/command_initializer.py index 5a04ae0a..aec83643 100644 --- a/app/startup/command_initializer.py +++ b/app/startup/command_initializer.py @@ -12,3 +12,9 @@ def stop_command(): 停止命令 """ pass + +def restart_command(): + """ + 重启命令 + """ + Command().init_commands() \ No newline at end of file diff --git a/app/startup/lifecycle.py b/app/startup/lifecycle.py index 2c006283..aa5a9270 100644 --- a/app/startup/lifecycle.py +++ b/app/startup/lifecycle.py @@ -3,27 +3,25 @@ from contextlib import asynccontextmanager from fastapi import FastAPI +from core.config import global_vars from app.startup.workflow_initializer import init_workflow, stop_workflow from app.startup.modules_initializer import init_modules, stop_modules -from app.startup.plugins_initializer import init_plugins, stop_plugins +from app.startup.plugins_initializer import init_plugins, stop_plugins, sync_plugins from app.startup.routers_initializer import init_routers -from core.config import global_vars -from startup.command_initializer import init_command, stop_command -from startup.monitor_initializer import stop_monitor, init_monitor -from startup.scheduler_initializer import stop_scheduler, init_scheduler +from app.startup.command_initializer import init_command, stop_command, restart_command +from app.startup.monitor_initializer import stop_monitor, init_monitor +from app.startup.scheduler_initializer import stop_scheduler, init_scheduler, restart_scheduler, init_plugin_scheduler -async def init_extra_system(): +async def init_plugin_system(): """ - 初始化额外的系统(依赖于插件初始化完成) + 同步插件及重启相关依赖服务 """ - await init_plugins() - # 启动监控器 - init_monitor() - # 启动定时器 - init_scheduler() - # 启动命令 - init_command() + if await sync_plugins(): + # 重新注册插件定时服务 + init_plugin_scheduler() + # 重新注册命令 + restart_command() @asynccontextmanager @@ -36,10 +34,18 @@ async def lifespan(app: FastAPI): init_modules() # 初始化路由 init_routers(app) + # 初始化定时器 + init_scheduler() + # 初始化监控器 + init_monitor() + # 初始化命令 + init_command() # 初始化工作流 init_workflow() - # 初始化插件依赖系统 - extra_init_task = asyncio.create_task(init_extra_system()) + # 初始化插件 + init_plugins() + # 插件同步到本地 + sync_plugins_task = asyncio.create_task(sync_plugins()) try: # 在此处 yield,表示应用已经启动,控制权交回 FastAPI 主事件循环 yield @@ -48,8 +54,8 @@ async def lifespan(app: FastAPI): # 停止信号 global_vars.stop_system() try: - extra_init_task.cancel() - await extra_init_task + sync_plugins_task.cancel() + await sync_plugins_task except asyncio.CancelledError: pass except Exception as e: diff --git a/app/startup/plugins_initializer.py b/app/startup/plugins_initializer.py index 88664b60..0c59f631 100644 --- a/app/startup/plugins_initializer.py +++ b/app/startup/plugins_initializer.py @@ -4,7 +4,7 @@ from app.core.plugin import PluginManager from app.log import logger -async def init_plugins(): +async def sync_plugins() -> bool: """ 初始化安装插件,并动态注册后台任务及API """ @@ -18,16 +18,19 @@ async def init_plugins(): # 判断是否需要进行插件初始化 if not sync_result and not resolved_dependencies: logger.debug("没有新的插件同步到本地或缺失依赖项需要安装") + return False # 继续执行后续的插件初始化步骤 - logger.info("正在初始化所有插件") - # 安装完成后初始化插件 - plugin_manager.start() - # 插件启动后注册插件API + logger.info("正在重新初始化插件") + # 重新初始化插件 + plugin_manager.init_config() + # 重新注册插件API register_plugin_api() logger.info("所有插件初始化完成") + return True except Exception as e: logger.error(f"插件初始化过程中出现异常: {e}") + return False async def execute_task(loop, task_func, task_name): @@ -54,6 +57,14 @@ def register_plugin_api(): plugin.register_plugin_api() +def init_plugins(): + """ + 初始化插件 + """ + PluginManager().start() + register_plugin_api() + + def stop_plugins(): """ 停止插件 diff --git a/app/startup/scheduler_initializer.py b/app/startup/scheduler_initializer.py index 6e8b3e36..951b17db 100644 --- a/app/startup/scheduler_initializer.py +++ b/app/startup/scheduler_initializer.py @@ -12,3 +12,15 @@ def stop_scheduler(): 停止定时器 """ Scheduler().stop() + +def restart_scheduler(): + """ + 重启定时器 + """ + Scheduler().init() + +def init_plugin_scheduler(): + """ + 初始化插件定时器 + """ + Scheduler().init_plugin_jobs()