fix: 引入任务生命周期管理,强制退出保护

This commit is contained in:
SXP-Simon
2026-03-06 17:45:08 +08:00
parent f47af8cb99
commit f627a2d8e1
+9 -1
View File
@@ -142,7 +142,7 @@ class GroupDailyAnalysis(Star):
self._initialized = False self._initialized = False
self._discovery_run = False # 是否已尝试过运行发现逻辑 self._discovery_run = False # 是否已尝试过运行发现逻辑
# 异步注册任务,处理插件重载情况 # 异步注册任务,处理插件重载情况
asyncio.create_task(self._run_initialization("Plugin Reload/Init")) self._init_task = asyncio.create_task(self._run_initialization("Plugin Reload/Init"))
# orchestrators 缓存已移至 应用层逻辑 (分析服务) 或 暂时移除以简化。 # orchestrators 缓存已移至 应用层逻辑 (分析服务) 或 暂时移除以简化。
# 如果需要高性能缓存,后续可由 AnalysisApplicationService 内部维护。 # 如果需要高性能缓存,后续可由 AnalysisApplicationService 内部维护。
@@ -167,6 +167,10 @@ class GroupDailyAnalysis(Star):
# 针对极少数环境,2秒可能不足以让平台管理器就绪,增加到 5秒 # 针对极少数环境,2秒可能不足以让平台管理器就绪,增加到 5秒
await asyncio.sleep(5) await asyncio.sleep(5)
# [加固] 如果在等待期间插件已被卸载(terminate),则直接退出
if not self.bot_manager:
return
try: try:
# 注册 TraceID 过滤器 # 注册 TraceID 过滤器
trace_filter = TraceLogFilter() trace_filter = TraceLogFilter()
@@ -214,6 +218,10 @@ class GroupDailyAnalysis(Star):
async def terminate(self): async def terminate(self):
"""插件被卸载/停用时调用,清理资源""" """插件被卸载/停用时调用,清理资源"""
try: try:
# 取消正在进行的初始化任务
if hasattr(self, "_init_task") and self._init_task and not self._init_task.done():
self._init_task.cancel()
logger.info("开始清理QQ群日常分析插件资源...") logger.info("开始清理QQ群日常分析插件资源...")
# 停止自动调度器 # 停止自动调度器