feat: 新增任务状态管理和API支持
- 添加任务状态API路由,支持获取当前用户的任务状态和待处理任务列表 - 实现任务追踪服务,使用Redis存储任务状态 - 更新回忆录处理逻辑,集成Celery任务提交和状态更新 - 增强测试用例,支持任务状态的获取和清除功能 - 优化代码结构,提升可读性和维护性
This commit is contained in:
@@ -146,6 +146,30 @@ class BackgroundTaskRunner:
|
||||
self.analyzer = ContentAnalyzer()
|
||||
self.generator = MemoirGenerator()
|
||||
|
||||
async def _submit_task(self, user_id: str, segment_ids: List[str]) -> str | None:
|
||||
"""
|
||||
提交 Celery 任务并记录
|
||||
|
||||
Returns:
|
||||
任务 ID,失败返回 None
|
||||
"""
|
||||
try:
|
||||
from tasks.memoir_tasks import process_memoir_segments
|
||||
from services.task_tracker import task_tracker
|
||||
|
||||
# 提交到 Celery
|
||||
result = process_memoir_segments.delay(user_id, segment_ids)
|
||||
task_id = result.id
|
||||
|
||||
# 记录任务
|
||||
await task_tracker.add_task(user_id, task_id, "memoir")
|
||||
|
||||
logger.info(f"已提交 Celery 任务: user_id={user_id}, task_id={task_id}, segments={len(segment_ids)}")
|
||||
return task_id
|
||||
except Exception as e:
|
||||
logger.error(f"提交 Celery 任务失败: {e}")
|
||||
return None
|
||||
|
||||
async def queue_message(self, user_id: str, segment_id: str) -> None:
|
||||
"""
|
||||
将消息加入处理队列
|
||||
@@ -167,20 +191,20 @@ class BackgroundTaskRunner:
|
||||
await asyncio.sleep(self.debounce_seconds)
|
||||
segment_ids = self._pending.pop(user_id, [])
|
||||
if segment_ids:
|
||||
# 提交到 Celery
|
||||
from tasks.memoir_tasks import process_memoir_segments
|
||||
process_memoir_segments.delay(user_id, segment_ids)
|
||||
logger.info(f"已提交 Celery 任务: user_id={user_id}, segments={len(segment_ids)}")
|
||||
await self._submit_task(user_id, segment_ids)
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
except Exception as e:
|
||||
logger.error(f"提交 Celery 任务失败: {e}")
|
||||
logger.error(f"延迟提交任务失败: {e}")
|
||||
|
||||
self._timers[user_id] = asyncio.create_task(delayed_submit())
|
||||
|
||||
async def flush_pending(self, user_id: str) -> None:
|
||||
async def flush_pending(self, user_id: str) -> str | None:
|
||||
"""
|
||||
立即提交用户的待处理任务(用于对话结束时)
|
||||
|
||||
Returns:
|
||||
任务 ID,无任务或失败返回 None
|
||||
"""
|
||||
# 取消定时器
|
||||
if user_id in self._timers:
|
||||
@@ -190,6 +214,5 @@ class BackgroundTaskRunner:
|
||||
# 提交待处理任务
|
||||
segment_ids = self._pending.pop(user_id, [])
|
||||
if segment_ids:
|
||||
from tasks.memoir_tasks import process_memoir_segments
|
||||
process_memoir_segments.delay(user_id, segment_ids)
|
||||
logger.info(f"立即提交 Celery 任务: user_id={user_id}, segments={len(segment_ids)}")
|
||||
return await self._submit_task(user_id, segment_ids)
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user