From b6792149f9ca3ad6008c0df7dacefe330272fd83 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Tue, 23 Sep 2025 14:08:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(permission):=20=E5=B0=86=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=99=A8=E5=88=9D=E5=A7=8B=E5=8C=96=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=BC=82=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PermissionManager` 的 `__init__` 方法中包含了同步的数据库初始化操作,这会在异步环境中阻塞事件循环。 本次提交将数据库连接的逻辑移至一个新的异步方法 `initialize()` 中,并在应用启动时显式调用和等待它。这确保了数据库的初始化过程是异步执行的,避免了潜在的性能问题。 BREAKING CHANGE: `PermissionManager` 实例化后需要手动调用并等待 `initialize()` 方法来完成数据库初始化。 --- src/main.py | 1 + src/plugin_system/core/permission_manager.py | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main.py b/src/main.py index 22c6218c9..734502271 100644 --- a/src/main.py +++ b/src/main.py @@ -223,6 +223,7 @@ MoFox_Bot(第三方修改版) from src.plugin_system.apis.permission_api import permission_api permission_manager = PermissionManager() + await permission_manager.initialize() permission_api.set_permission_manager(permission_manager) logger.info("权限管理器初始化成功") diff --git a/src/plugin_system/core/permission_manager.py b/src/plugin_system/core/permission_manager.py index eb6083fc9..c79012e13 100644 --- a/src/plugin_system/core/permission_manager.py +++ b/src/plugin_system/core/permission_manager.py @@ -22,10 +22,15 @@ class PermissionManager(IPermissionManager): """权限管理器实现类""" def __init__(self): - self.engine = get_engine() - self.SessionLocal = async_sessionmaker(bind=self.engine) + self.engine = None + self.SessionLocal = None self._master_users: Set[Tuple[str, str]] = set() self._load_master_users() + + async def initialize(self): + """异步初始化数据库连接""" + self.engine = await get_engine() + self.SessionLocal = async_sessionmaker(bind=self.engine) logger.info("权限管理器初始化完成") def _load_master_users(self):