"""轻量级异步任务服务 - 内存存储,用于跟踪后台爬取任务""" import uuid from datetime import datetime, timedelta from typing import Optional, Dict, Any from app.core.log import logger class TaskService: """异步任务状态管理器""" def __init__(self, max_age_seconds: int = 3600): self._tasks: Dict[str, dict] = {} self._max_age_seconds = max_age_seconds def create_task(self, task_type: str) -> str: task_id = str(uuid.uuid4()) now = datetime.now() self._tasks[task_id] = { "id": task_id, "type": task_type, "status": "pending", "message": "", "data": {}, "created_at": now, "updated_at": now, } return task_id def update_task( self, task_id: str, status: Optional[str] = None, message: Optional[str] = None, data: Optional[dict] = None, ) -> bool: task = self._tasks.get(task_id) if not task: return False if status is not None: task["status"] = status if message is not None: task["message"] = message if data is not None: task["data"].update(data) task["updated_at"] = datetime.now() return True def get_task(self, task_id: str) -> Optional[dict]: return self._tasks.get(task_id) def cleanup_old_tasks(self) -> int: cutoff = datetime.now() - timedelta(seconds=self._max_age_seconds) to_remove = [tid for tid, task in self._tasks.items() if task["created_at"] < cutoff] for tid in to_remove: del self._tasks[tid] if to_remove: logger.info(f"TaskService cleaned up {len(to_remove)} old tasks") return len(to_remove) # 全局任务服务实例 task_service = TaskService()