# multiTask **Repository Path**: kermitbuxk/multi-task ## Basic Information - **Project Name**: multiTask - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-08 - **Last Updated**: 2025-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多线程数据库同步工具 这是一个用Python编写的多线程数据库同步工具框架,用于并行同步大量数据库表数据。该工具设计为可配置的、线程安全的,支持任务重试和优雅退出。项目采用了模块化的包结构设计,便于维护和扩展。 ## 功能特性 - **多线程并行处理**:使用线程池并行同步多个数据库表 - **可配置性**:支持通过命令行参数调整线程池大小、重试次数等 - **任务重试机制**:当表同步失败时自动重试,支持配置最大重试次数 - **线程安全日志**:详细记录每个任务的执行情况,包含线程信息 - **优雅退出**:支持捕获Ctrl+C信号,确保程序可以安全停止 - **任务状态管理**:跟踪每个任务的状态和进度 - **异常处理**:全面的异常捕获和处理机制 - **模块化包结构**:采用清晰的包组织,提高代码可维护性 ## 项目结构 ``` multiTask/ ├── db_sync_tool.py # 主程序文件 ├── config.py # 配置管理模块 ├── requirements.txt # 项目依赖 ├── README.md # 项目说明 ├── log/ # 日志文件目录(自动创建) └── lib/ # 核心模块包 ├── __init__.py ├── logger/ # 日志子包 │ ├── __init__.py │ └── logger.py ├── task_manager/ # 任务管理子包 │ ├── __init__.py │ └── task_manager.py └── db_operations/ # 数据库操作子包 ├── __init__.py └── db_operations.py ``` ## 主要模块说明 ### db_sync_tool.py 主程序文件,包含`DBSyncTool`类,负责管理整个同步过程: - 初始化线程池 - 分发同步任务 - 处理任务结果 - 管理程序生命周期和信号处理 - 导入和使用lib包中的各个子模块 ### config.py 配置管理模块,通过命令行参数和默认值提供程序配置: - 线程池最大线程数 - 任务最大重试次数 - 日志级别设置 ### lib/logger/ 线程安全的日志子包: - 同时输出日志到文件和控制台 - 日志中包含线程ID和线程名称 - 支持动态修改日志级别 - 日志文件自动生成在入口程序所在目录的log文件夹中 ### lib/task_manager/ 任务管理子包: - 管理任务队列和任务状态 - 提供任务统计和进度信息 - 支持任务取消和状态查询 ### lib/db_operations/ 模拟数据库操作的子包: - 模拟从源数据库拉取数据 - 模拟向目标数据库插入数据 - 模拟各种可能的数据库错误和异常 - 定义数据库相关的异常类层次结构 ## 安装与使用 ### 环境要求 - Python 3.8 或更高版本 - 无特殊第三方依赖,使用Python标准库即可 ### 安装 1. 克隆或下载本项目到本地 2. 确保使用Python 3.8或更高版本 3. 项目采用模块化包结构,无需额外安装配置即可使用 ### 运行 基本用法: ```bash python db_sync_tool.py ``` 使用自定义参数: ```bash python db_sync_tool.py --max_workers 15 --log_level DEBUG --ignore_errors ``` ### 命令行参数 - `--max_workers`:线程池最大线程数,默认10 - `--log_level`:日志级别,可选值为DEBUG, INFO, WARNING, ERROR, CRITICAL,默认INFO - `--ignore_errors`:是否忽略错误继续执行,默认False **注意**:日志文件路径已自动设置为入口程序所在目录的log文件夹中,文件名格式为`db_sync_YYYYMMDD_HHMMSS.log`,无需手动指定。 ## 模拟数据说明 该工具不依赖真实数据库环境,而是通过模拟方式生成测试数据: - **小型表**(table_0001 ~ table_0100):100-500行数据,5-10列 - **中型表**(table_0101 ~ table_0400):1000-5000行数据,10-20列 - **大型表**(table_0401 ~ table_0500):10000-50000行数据,20-50列 模拟操作会随机产生各种错误,用于测试重试机制和异常处理。 ## 日志格式 日志条目包含以下信息: - 时间戳 - 线程名称 - 日志级别 - 线程ID - 日志消息 示例: ``` 2025-11-08 12:42:31 | MainThread | WARNING | 312 | 任务已被取消,跳过结果处理 2025-11-08 12:42:32 | work_1 | INFO | 205 | 表 table_0025 同步成功,耗时: 0.50秒 ``` 日志文件会自动生成在入口程序所在目录的log文件夹中,文件名采用日期时间戳格式,便于查找和管理。 ## 程序退出 - 当所有任务完成时,程序会自动退出 - 按Ctrl+C可以中断程序,此时会等待当前正在执行的任务完成,然后退出 - 如果有任务失败,程序会返回非零退出码 ## 性能考虑 - 线程池大小应根据实际系统性能和网络带宽进行调整 - 过大的线程池可能导致系统资源争用,反而降低性能 - 对于I/O密集型任务(如数据库操作),线程池大小可以适当大于CPU核心数 ## 扩展与修改 项目采用模块化包结构设计,便于扩展和修改。如需扩展功能,可以考虑以下几点: 1. 替换`lib/db_operations/db_operations.py`中的模拟函数为真实数据库操作 2. 在`lib`包下添加新的子包,实现特定功能模块 3. 修改`lib/task_manager/task_manager.py`以支持更多任务类型或优化任务调度 4. 扩展`lib/logger/logger.py`以支持更多输出目标或自定义日志格式 5. 添加数据验证和一致性检查功能 6. 实现增量同步功能,只同步变更数据 7. 添加监控和告警功能 8. 实现分布式部署支持,处理更大规模的数据同步任务