refactor(database): 将同步数据库操作迁移为异步操作
将整个项目的数据库操作从同步模式迁移为异步模式,主要涉及以下修改: - 将 `with get_db_session()` 改为 `async with get_db_session()` - 将同步的 SQLAlchemy 查询方法改为异步执行 - 更新相关的方法签名,添加 async/await 关键字 - 修复由于异步化导致的并发问题和性能问题 这些修改提高了数据库操作的并发性能,避免了阻塞主线程,提升了系统的整体响应能力。涉及修改的模块包括表情包管理、反提示注入统计、用户封禁管理、记忆系统、消息存储等多个核心组件。 BREAKING CHANGE: 所有涉及数据库操作的方法现在都需要使用异步调用,同步调用将不再工作
This commit is contained in:
13
bot.py
13
bot.py
@@ -185,12 +185,12 @@ class MaiBotMain(BaseMain):
|
||||
check_eula()
|
||||
logger.info("检查EULA和隐私条款完成")
|
||||
|
||||
def initialize_database(self):
|
||||
async def initialize_database(self):
|
||||
"""初始化数据库"""
|
||||
|
||||
logger.info("正在初始化数据库连接...")
|
||||
try:
|
||||
initialize_sql_database(global_config.database)
|
||||
await initialize_sql_database(global_config.database)
|
||||
logger.info(f"数据库连接初始化成功,使用 {global_config.database.database_type} 数据库")
|
||||
except Exception as e:
|
||||
logger.error(f"数据库连接初始化失败: {e}")
|
||||
@@ -211,11 +211,11 @@ class MaiBotMain(BaseMain):
|
||||
self.main_system = MainSystem()
|
||||
return self.main_system
|
||||
|
||||
def run(self):
|
||||
async def run(self):
|
||||
"""运行主程序"""
|
||||
self.setup_timezone()
|
||||
self.check_and_confirm_eula()
|
||||
self.initialize_database()
|
||||
await self.initialize_database()
|
||||
|
||||
return self.create_main_system()
|
||||
|
||||
@@ -225,14 +225,14 @@ if __name__ == "__main__":
|
||||
try:
|
||||
# 创建MaiBotMain实例并获取MainSystem
|
||||
maibot = MaiBotMain()
|
||||
main_system = maibot.run()
|
||||
|
||||
# 创建事件循环
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
|
||||
try:
|
||||
# 异步初始化数据库表结构
|
||||
# 异步初始化数据库和表结构
|
||||
main_system = loop.run_until_complete(maibot.run())
|
||||
loop.run_until_complete(maibot.initialize_database_async())
|
||||
# 执行初始化和任务调度
|
||||
loop.run_until_complete(main_system.initialize())
|
||||
@@ -269,3 +269,4 @@ if __name__ == "__main__":
|
||||
# 在程序退出前暂停,让你有机会看到输出
|
||||
# input("按 Enter 键退出...") # <--- 添加这行
|
||||
sys.exit(exit_code) # <--- 使用记录的退出码
|
||||
|
||||
Reference in New Issue
Block a user