feat(plugin_system): 实现 on_plugin_loaded 异步钩子
在插件成功加载和注册后,添加一个新的生命周期钩子 `on_plugin_loaded`。 此钩子允许插件在加载完成后执行异步的初始化任务,例如建立数据库连接、加载数据或启动后台服务。通过使用 `asyncio.create_task`,确保了钩子的执行不会阻塞插件的加载流程,从而提高了系统的响应性和健壮性。
This commit is contained in:
@@ -197,6 +197,18 @@ class PluginManager:
|
|||||||
if plugin_instance.register_plugin():
|
if plugin_instance.register_plugin():
|
||||||
self.loaded_plugins[plugin_name] = plugin_instance
|
self.loaded_plugins[plugin_name] = plugin_instance
|
||||||
self._show_plugin_components(plugin_name)
|
self._show_plugin_components(plugin_name)
|
||||||
|
|
||||||
|
# 检查并调用 on_plugin_loaded 钩子(如果存在)
|
||||||
|
if hasattr(plugin_instance, "on_plugin_loaded") and callable(
|
||||||
|
getattr(plugin_instance, "on_plugin_loaded")
|
||||||
|
):
|
||||||
|
logger.debug(f"为插件 '{plugin_name}' 调用 on_plugin_loaded 钩子")
|
||||||
|
try:
|
||||||
|
# 使用 asyncio.create_task 确保它不会阻塞加载流程
|
||||||
|
asyncio.create_task(plugin_instance.on_plugin_loaded())
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"调用插件 '{plugin_name}' 的 on_plugin_loaded 钩子时出错: {e}")
|
||||||
|
|
||||||
return True, 1
|
return True, 1
|
||||||
else:
|
else:
|
||||||
self.failed_plugins[plugin_name] = "插件注册失败"
|
self.failed_plugins[plugin_name] = "插件注册失败"
|
||||||
|
|||||||
Reference in New Issue
Block a user