From 1d6133e3b1ef5b2231dc96a9ed5f09add14decb9 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 8 Jun 2025 21:39:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=20plugins=E9=81=8D=E5=8E=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/plugin.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/core/plugin.py b/app/core/plugin.py index b99bddc7..aeb78e24 100644 --- a/app/core/plugin.py +++ b/app/core/plugin.py @@ -462,7 +462,9 @@ class PluginManager(metaclass=Singleton): }] """ ret_commands = [] - for plugin_id, plugin in self._running_plugins.items(): + # 创建字典快照避免并发修改 + running_plugins_snapshot = dict(self._running_plugins) + for plugin_id, plugin in running_plugins_snapshot.items(): if pid and pid != plugin_id: continue if hasattr(plugin, "get_command") and ObjectUtils.check_method(plugin.get_command): @@ -522,7 +524,9 @@ class PluginManager(metaclass=Singleton): }] """ ret_services = [] - for plugin_id, plugin in self._running_plugins.items(): + # 创建字典快照避免并发修改 + running_plugins_snapshot = dict(self._running_plugins) + for plugin_id, plugin in running_plugins_snapshot.items(): if pid and pid != plugin_id: continue if hasattr(plugin, "get_service") and ObjectUtils.check_method(plugin.get_service): @@ -545,7 +549,9 @@ class PluginManager(metaclass=Singleton): } """ ret_modules = {} - for plugin_id, plugin in self._running_plugins.items(): + # 创建字典快照避免并发修改 + running_plugins_snapshot = dict(self._running_plugins) + for plugin_id, plugin in running_plugins_snapshot.items(): if pid and pid != plugin_id: continue if hasattr(plugin, "get_module") and ObjectUtils.check_method(plugin.get_module): @@ -569,7 +575,9 @@ class PluginManager(metaclass=Singleton): }] """ ret_actions = [] - for plugin_id, plugin in self._running_plugins.items(): + # 创建字典快照避免并发修改 + running_plugins_snapshot = dict(self._running_plugins) + for plugin_id, plugin in running_plugins_snapshot.items(): if pid and pid != plugin_id: continue if hasattr(plugin, "get_actions") and ObjectUtils.check_method(plugin.get_actions): @@ -606,7 +614,9 @@ class PluginManager(metaclass=Singleton): 获取插件联邦组件列表 """ remotes = [] - for plugin_id, plugin in self._running_plugins.items(): + # 创建字典快照避免并发修改 + running_plugins_snapshot = dict(self._running_plugins) + for plugin_id, plugin in running_plugins_snapshot.items(): if pid and pid != plugin_id: continue if hasattr(plugin, "get_render_mode"): @@ -625,7 +635,9 @@ class PluginManager(metaclass=Singleton): 获取所有插件仪表盘元信息 """ dashboard_meta = [] - for plugin_id, plugin in self._running_plugins.items(): + # 创建字典快照避免并发修改 + running_plugins_snapshot = dict(self._running_plugins) + for plugin_id, plugin in running_plugins_snapshot.items(): if not hasattr(plugin, "get_dashboard") or not ObjectUtils.check_method(plugin.get_dashboard): continue try: