diff --git a/plugin_common/plugin_manager.py b/plugin_common/plugin_manager.py index 1875040..a1803f6 100644 --- a/plugin_common/plugin_manager.py +++ b/plugin_common/plugin_manager.py @@ -313,3 +313,29 @@ class PluginManager: # 加载插件 return self.load_plugin(plugin_name) + + def shutdown_plugins(self) -> bool: + """ + 卸载所有插件 + + Returns: + 是否全部成功卸载 + """ + success = True + # 创建插件名称的副本,因为在卸载过程中会修改self.plugins字典 + plugin_names = list(self.plugins.keys()) + + for plugin_name in plugin_names: + if not self.unload_plugin(plugin_name): + self.LOG.error(f"卸载插件 {plugin_name} 失败") + success = False + + # 清空插件模块字典 + self.plugin_modules.clear() + + # 确保插件字典为空 + if self.plugins: + self.LOG.warning(f"插件卸载后仍有 {len(self.plugins)} 个插件残留") + success = False + + return success