---
description: 
globs: 
alwaysApply: false
---
# VWED任务模块 - 任务调度系统

## 增强版任务调度系统概述

增强版任务调度系统是VWED任务模块的核心组件，提供高性能、可靠性和可扩展性的任务处理能力。系统采用模块化设计，包含多个协同工作的组件。

## 核心组件

### EnhancedScheduler

主调度器，负责协调各个组件工作，是整个调度系统的核心。它管理任务的生命周期，从提交到完成的全过程。

### PriorityQueueManager

优先级队列管理器，实现多级优先级队列，通过动态阈值算法优化任务分布，确保高优先级任务优先处理，同时避免低优先级任务长时间饥饿。

### WorkerManager

工作线程管理器，负责创建和管理工作线程池，支持动态调整线程池大小，进行心跳监控，及时发现异常并进行恢复。

### PeriodicTaskManager

定时任务管理器，支持Cron表达式，提供高级定时任务管理功能，适用于需要周期性执行的任务。

### TaskPersistenceManager

任务持久化管理器，负责将任务队列持久化到存储系统，提供故障恢复机制，确保系统重启后任务不丢失。

## 工作流程

1. 任务提交：通过API接口或内部服务提交任务到调度系统
2. 任务接收：EnhancedScheduler接收任务并交由PriorityQueueManager进行优先级排队
3. 任务调度：WorkerManager根据系统负载情况，从队列中取出任务分配给工作线程
4. 任务执行：工作线程执行任务，并将执行状态反馈给调度器
5. 状态管理：调度器更新任务状态，并在必要时触发相应的回调函数
6. 结果处理：任务执行完成后，处理执行结果，更新数据库状态

## 系统特性

### 动态工作线程池

系统可根据任务负载情况自动调整工作线程数量，在最小工作线程数和最大工作线程数之间动态调整，以优化资源利用率。

```python
# 动态调整工作线程数
async def adjust_worker_count(self, current_queue_size: int):
    """根据队列大小动态调整工作线程数量"""
    if current_queue_size > self.high_watermark and self.worker_count < self.max_worker_count:
        # 增加工作线程
        new_workers = min(self.worker_count + 2, self.max_worker_count) - self.worker_count
        if new_workers > 0:
            await self.add_workers(new_workers)
    elif current_queue_size < self.low_watermark and self.worker_count > self.min_worker_count:
        # 减少工作线程（只减空闲的）
        idle_workers = len([w for w in self.workers.values() if w.status == WorkerStatus.IDLE])
        if idle_workers > 2:  # 保留一些空闲工作线程以应对突发负载
            to_remove = min(idle_workers - 2, self.worker_count - self.min_worker_count)
            if to_remove > 0:
                await self.remove_workers(to_remove)
```

### 任务优先级管理

系统支持任务优先级设置，优先级越高的任务越先被调度执行。系统还实现了平衡调度策略，避免低优先级任务长时间得不到执行。

### 健壮性保障

系统实现了全面的异常处理和故障恢复机制：

1. 工作线程异常自动恢复
2. 系统重启后任务队列恢复
3. 僵尸任务检测和清理
4. 超时任务处理

### 监控和统计

系统提供丰富的监控和统计信息，包括：

1. 任务执行统计（成功率、平均执行时间等）
2. 队列状态监控（各优先级队列长度、等待时间等）
3. 资源使用监控（CPU、内存使用率等）
4. 工作线程健康状态

## 调度系统初始化

系统在应用启动时初始化，在应用关闭时优雅停止：

```python
@asynccontextmanager
async def lifespan(app: FastAPI):
    # 启动前的初始化操作
    # 启动增强版任务调度器
    from services.enhanced_scheduler import scheduler
    await scheduler.start(worker_count=settings.TASK_SCHEDULER_MIN_WORKER_COUNT)
    logger.info(f"增强版任务调度器已启动，最小工作线程数: {settings.TASK_SCHEDULER_MIN_WORKER_COUNT}，最大工作线程数: {settings.TASK_SCHEDULER_MAX_WORKER_COUNT}")
    
    yield
    
    # 应用程序关闭前的清理操作
    # 停止增强版任务调度器
    from services.enhanced_scheduler import scheduler
    await scheduler.stop()
    logger.info("增强版任务调度器已停止")
```

