refactor(chat): 迁移数据库操作为异步模式并修复相关调用
将同步数据库操作全面迁移为异步模式,主要涉及: - 将 `with get_db_session()` 改为 `async with get_db_session()` - 修复相关异步调用链,确保 await 正确传递 - 优化消息管理器、上下文管理器等核心组件的异步处理 - 移除同步的 person_id 获取方法,避免协程对象传递问题 修复 deepcopy 在 StreamContext 中的序列化问题,跳过不可序列化的 asyncio.Task 对象 删除无用的测试文件和废弃的插件清单文件
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
import random
|
||||
import re
|
||||
import string
|
||||
@@ -667,10 +668,32 @@ async def get_chat_type_and_target_info(chat_id: str) -> Tuple[bool, Optional[Di
|
||||
person_id = person.person_id
|
||||
person_name = None
|
||||
if person_id:
|
||||
# get_value is async, so await it directly
|
||||
person_info_manager = get_person_info_manager()
|
||||
person_data = await person_info_manager.get_values(person_id, ["person_name"])
|
||||
person_name = person_data.get("person_name")
|
||||
try:
|
||||
# 如果没有运行的事件循环,直接 asyncio.run
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
# 如果事件循环在运行,从其他线程提交并等待结果
|
||||
try:
|
||||
from concurrent.futures import TimeoutError
|
||||
|
||||
fut = asyncio.run_coroutine_threadsafe(
|
||||
person_info_manager.get_value(person_id, "person_name"), loop
|
||||
)
|
||||
person_name = fut.result(timeout=2)
|
||||
except Exception as e:
|
||||
# 无法在运行循环上安全等待,退回为 None
|
||||
logger.debug(f"无法通过运行的事件循环获取 person_name: {e}")
|
||||
person_name = None
|
||||
else:
|
||||
person_name = asyncio.run(person_info_manager.get_value(person_id, "person_name"))
|
||||
except RuntimeError:
|
||||
# get_event_loop 在某些上下文可能抛出 RuntimeError,退回到 asyncio.run
|
||||
try:
|
||||
person_name = asyncio.run(person_info_manager.get_value(person_id, "person_name"))
|
||||
except Exception as e:
|
||||
logger.debug(f"获取 person_name 失败: {e}")
|
||||
person_name = None
|
||||
|
||||
target_info["person_id"] = person_id
|
||||
target_info["person_name"] = person_name
|
||||
|
||||
Reference in New Issue
Block a user