feat: 实现AI视频分类10个并发任务同时运行

- 重构VideoClassificationQueue支持并发处理架构
- 将max_concurrent_tasks从1提升到10(根据CPU核心数动态调整)
- 实现多worker并发处理机制,使用tokio::spawn创建独立worker
- 添加智能任务分发机制,使用原子操作避免任务重复分配
- 优化错误处理:连续错误限制、超时保护、渐进式重试
- 改进资源管理:CPU核心检测、内存使用优化
- 添加统计更新worker,实时监控处理进度
- 支持worker独立错误恢复,提高系统稳定性

性能提升:理论上可提升10倍处理速度,实际受网络和AI服务限制
This commit is contained in:
imeepos
2025-07-18 11:32:24 +08:00
parent 3dbdca4ee6
commit 176ad61ac0
2 changed files with 307 additions and 82 deletions

View File

@@ -0,0 +1,117 @@
# AI视频分类并行处理测试
## 功能概述
本次更新实现了AI视频分类的并行处理功能支持10个并发任务同时运行大幅提升处理效率。
## 主要改进
### 1. 并发架构重构
- **原来**: 单任务串行处理 (`max_concurrent_tasks: 1`)
- **现在**: 支持10个并发任务 (`max_concurrent_tasks: 10`)
- **智能并发数**: 根据CPU核心数动态调整 (`cpu_cores * 2`最大10)
### 2. Worker管理系统
- **多Worker架构**: 启动10个独立的worker进程
- **任务分发机制**: 原子操作确保任务不重复分配
- **状态管理**: 使用`HashSet<String>`跟踪当前处理的任务
### 3. 错误处理和恢复
- **连续错误限制**: 单个worker最多5次连续错误后暂停30秒
- **超时保护**: 单个任务最长处理时间5分钟
- **渐进式重试**: 错误次数越多,等待时间越长
### 4. 资源管理优化
- **内存管理**: 避免过度并发导致内存溢出
- **任务队列**: 智能任务分发,避免资源竞争
- **统计更新**: 独立的统计更新worker每5秒更新一次
## 性能提升
### 理论性能提升
- **处理速度**: 从1个任务/时间单位 → 最多10个任务/时间单位
- **吞吐量**: 理论上提升10倍实际受网络和AI服务限制
- **资源利用**: 更好地利用多核CPU和网络带宽
### 实际测试场景
1. **小批量测试**: 10-20个视频文件
2. **中等批量**: 50-100个视频文件
3. **大批量**: 200+个视频文件
## 技术实现细节
### 核心数据结构变更
```rust
// 原来
current_task: Arc<Mutex<Option<String>>>,
// 现在
current_tasks: Arc<RwLock<HashSet<String>>>,
worker_handles: Arc<Mutex<Vec<tokio::task::JoinHandle<()>>>>,
```
### Worker循环逻辑
```rust
async fn worker_loop(&self, worker_id: usize) {
// 错误计数和恢复机制
// 任务获取和处理
// 超时保护
// 资源清理
}
```
### 任务分发机制
```rust
async fn try_process_next_task(&self, worker_id: usize) -> Result<Option<String>> {
// 检查并发限制
// 原子操作获取任务
// 超时处理
// 状态更新
}
```
## 测试验证
### 1. 编译测试
`cargo check` - 通过
`cargo build` - 通过
✅ 应用启动 - 成功
### 2. 功能测试
- [ ] 创建测试项目
- [ ] 添加测试视频文件
- [ ] 启动AI分类任务
- [ ] 验证并发处理
- [ ] 检查处理结果
### 3. 性能测试
- [ ] 单任务处理时间基准
- [ ] 10并发任务处理时间
- [ ] 资源使用情况监控
- [ ] 错误恢复机制验证
## 使用说明
### 启动并发处理
1. 在项目详情页面点击"一键AI分类"
2. 系统自动检测CPU核心数并设置最优并发数
3. 启动多个worker开始并发处理
4. 实时查看处理进度和统计信息
### 监控和调试
- 查看控制台输出了解worker状态
- 检查任务进度和错误信息
- 监控系统资源使用情况
## 注意事项
1. **网络限制**: 实际性能受Gemini API调用频率限制
2. **内存使用**: 大量并发可能增加内存使用
3. **错误处理**: 网络错误会触发重试机制
4. **资源竞争**: 避免同时运行多个大批量分类任务
## 下一步优化
1. **动态并发调整**: 根据系统负载动态调整并发数
2. **优先级队列**: 支持任务优先级排序
3. **断点续传**: 支持任务中断后从断点继续
4. **批量优化**: 优化批量任务的内存使用