将整个项目的数据库操作从同步模式迁移为异步模式,主要涉及以下修改: - 将 `with get_db_session()` 改为 `async with get_db_session()` - 将同步的 SQLAlchemy 查询方法改为异步执行 - 更新相关的方法签名,添加 async/await 关键字 - 修复由于异步化导致的并发问题和性能问题 这些修改提高了数据库操作的并发性能,避免了阻塞主线程,提升了系统的整体响应能力。涉及修改的模块包括表情包管理、反提示注入统计、用户封禁管理、记忆系统、消息存储等多个核心组件。 BREAKING CHANGE: 所有涉及数据库操作的方法现在都需要使用异步调用,同步调用将不再工作
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
测试 ChatStream 的 deepcopy 功能
|
||
验证 asyncio.Task 序列化问题是否已解决
|
||
"""
|
||
|
||
import asyncio
|
||
import sys
|
||
import os
|
||
import copy
|
||
|
||
# 添加项目根目录到 Python 路径
|
||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
||
from src.chat.message_receive.chat_stream import ChatStream
|
||
from maim_message import UserInfo, GroupInfo
|
||
|
||
|
||
async def test_chat_stream_deepcopy():
|
||
"""测试 ChatStream 的 deepcopy 功能"""
|
||
print("[TEST] 开始测试 ChatStream deepcopy 功能...")
|
||
|
||
try:
|
||
# 创建测试用的用户和群组信息
|
||
user_info = UserInfo(
|
||
platform="test_platform",
|
||
user_id="test_user_123",
|
||
user_nickname="测试用户",
|
||
user_cardname="测试卡片名"
|
||
)
|
||
|
||
group_info = GroupInfo(
|
||
platform="test_platform",
|
||
group_id="test_group_456",
|
||
group_name="测试群组"
|
||
)
|
||
|
||
# 创建 ChatStream 实例
|
||
print("📝 创建 ChatStream 实例...")
|
||
stream_id = "test_stream_789"
|
||
platform = "test_platform"
|
||
|
||
chat_stream = ChatStream(
|
||
stream_id=stream_id,
|
||
platform=platform,
|
||
user_info=user_info,
|
||
group_info=group_info
|
||
)
|
||
|
||
print(f"[SUCCESS] ChatStream 创建成功: {chat_stream.stream_id}")
|
||
|
||
# 等待一下,让异步任务有机会创建
|
||
await asyncio.sleep(0.1)
|
||
|
||
# 尝试进行 deepcopy
|
||
print("[INFO] 尝试进行 deepcopy...")
|
||
copied_stream = copy.deepcopy(chat_stream)
|
||
|
||
print("[SUCCESS] deepcopy 成功!")
|
||
|
||
# 验证复制后的对象属性
|
||
print("\n[CHECK] 验证复制后的对象属性:")
|
||
print(f" - stream_id: {copied_stream.stream_id}")
|
||
print(f" - platform: {copied_stream.platform}")
|
||
print(f" - user_info: {copied_stream.user_info.user_nickname}")
|
||
print(f" - group_info: {copied_stream.group_info.group_name}")
|
||
|
||
# 检查 processing_task 是否被正确处理
|
||
if hasattr(copied_stream.stream_context, 'processing_task'):
|
||
print(f" - processing_task: {copied_stream.stream_context.processing_task}")
|
||
if copied_stream.stream_context.processing_task is None:
|
||
print(" [SUCCESS] processing_task 已被正确设置为 None")
|
||
else:
|
||
print(" [WARNING] processing_task 不为 None")
|
||
else:
|
||
print(" [SUCCESS] stream_context 没有 processing_task 属性")
|
||
|
||
# 验证原始对象和复制对象是不同的实例
|
||
if id(chat_stream) != id(copied_stream):
|
||
print("[SUCCESS] 原始对象和复制对象是不同的实例")
|
||
else:
|
||
print("[ERROR] 原始对象和复制对象是同一个实例")
|
||
|
||
# 验证基本属性是否正确复制
|
||
if (chat_stream.stream_id == copied_stream.stream_id and
|
||
chat_stream.platform == copied_stream.platform):
|
||
print("[SUCCESS] 基本属性正确复制")
|
||
else:
|
||
print("[ERROR] 基本属性复制失败")
|
||
|
||
print("\n[COMPLETE] 测试完成!deepcopy 功能修复成功!")
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"[ERROR] 测试失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 运行测试
|
||
result = asyncio.run(test_chat_stream_deepcopy())
|
||
|
||
if result:
|
||
print("\n[SUCCESS] 所有测试通过!")
|
||
sys.exit(0)
|
||
else:
|
||
print("\n[ERROR] 测试失败!")
|
||
sys.exit(1) |