QAResourceManager - QUANTAXIS统一资源管理器
版本: QUANTAXIS 2.1.0+ 作者: @yutiansut @quantaxis 日期: 2025
📋 概述
QAResourceManager是QUANTAXIS 2.1.0新增的统一资源管理器,提供对MongoDB、RabbitMQ、ClickHouse、Redis等外部资源的统一管理和优雅关闭机制。
核心特性
✅ 连接池管理 - 自动复用连接,减少开销 ✅ 上下文管理器 - 支持with语句,自动释放资源 ✅ 优雅关闭 - 确保资源正确释放,无泄漏 ✅ 自动重连 - 连接断开时自动重试 ✅ 健康检查 - 定期检查连接状态 ✅ 线程安全 - 支持多线程环境 ✅ 单例模式 - 全局资源池管理 ✅ atexit清理 - 程序退出时自动关闭资源
🚀 快速开始
安装依赖
# 基础依赖 (MongoDB)
pip install pymongo motor
# RabbitMQ
pip install pika
# ClickHouse
pip install clickhouse-driver
# Redis
pip install redis
# 完整安装
pip install quantaxis[full]最简示例
📚 详细文档
1. MongoDB资源管理器
1.1 基本用法
1.2 配置参数
1.3 异步模式
1.4 连接池配置
QAMongoResourceManager默认配置:
maxPoolSize: 100 (最大连接数)
minPoolSize: 10 (最小连接数)
maxIdleTimeMS: 60000 (60秒, 连接最大空闲时间)
waitQueueTimeoutMS: 5000 (5秒, 等待连接池超时)
2. RabbitMQ资源管理器
2.1 基本用法
2.2 配置参数
2.3 安全特性
密码擦除: 认证后自动清除内存中的密码 (
erase_on_connect=True)心跳保持: 默认600秒心跳,防止连接超时
优雅关闭: 先关闭通道,再关闭连接
3. ClickHouse资源管理器
3.1 基本用法
3.2 配置参数
3.3 性能优化配置
4. Redis资源管理器
4.1 基本用法
4.2 配置参数
4.3 管道操作
4.4 健康检查
5. 统一资源池管理器
5.1 基本用法(推荐)
5.2 单例模式
QAResourcePool采用单例模式,全局唯一:
5.3 自动清理
5.4 单独关闭资源
6. 便捷函数
6.1 快捷上下文管理器
🔧 高级用法
1. 自定义连接配置
MongoDB自定义URI
RabbitMQ认证
2. 连接重试
所有资源管理器均支持reconnect()方法:
3. 健康检查
4. 线程安全
所有资源管理器使用threading.RLock确保线程安全:
💡 最佳实践
1. 使用with语句
✅ 推荐:
❌ 不推荐:
2. 使用资源池管理全局资源
✅ 推荐 (长期运行的应用):
❌ 不推荐 (频繁创建销毁):
3. 异常处理
✅ 推荐:
4. 配置外部化
✅ 推荐:
5. 日志监控
📊 性能优化
MongoDB连接池调优
RabbitMQ心跳调优
ClickHouse查询优化
Redis连接池调优
🐛 故障排查
问题1: ImportError
解决:
问题2: 连接超时
解决:
问题3: 资源泄漏
症状: 程序运行一段时间后,数据库连接数不断增加
解决:
问题4: RabbitMQ连接断开
症状: pika.exceptions.StreamLostError
解决:
📖 示例代码
完整示例请参考:
examples/resource_manager_example.py - 9个完整示例
QUANTAXIS/QAUtil/QAResourceManager.py - 源码和内联文档
🔗 相关文档
🤝 贡献
如果发现问题或有改进建议,欢迎:
提交Issue: https://github.com/QUANTAXIS/QUANTAXIS/issues
提交PR: https://github.com/QUANTAXIS/QUANTAXIS/pulls
📝 更新日志
v2.1.0 (2025-01-25)
✨ 新增QAResourceManager统一资源管理器
✨ 新增MongoDB/RabbitMQ/ClickHouse/Redis管理器
✨ 新增QAResourcePool单例资源池
✨ 新增便捷上下文管理器函数
✨ 新增自动atexit清理机制
✨ 新增健康检查功能
✨ 新增线程安全支持
👥 作者
@yutiansut @quantaxis
📄 许可证
MIT License
Copyright (c) 2016-2025 yutiansut/QUANTAXIS
Last updated
Was this helpful?