diff --git a/server/core/task_dispatcher.py b/server/core/task_dispatcher.py index 98c7258..ca7a500 100644 --- a/server/core/task_dispatcher.py +++ b/server/core/task_dispatcher.py @@ -9,6 +9,7 @@ import logging import time from typing import List, Optional +from asgiref.sync import sync_to_async from common.protocol import MsgType, TaskStatus, make_msg from server.models import TaskCreate, Task @@ -75,6 +76,31 @@ class TaskDispatcher: # ─── 创建任务 ─── + @staticmethod + @sync_to_async + def _mark_dispatched(task_id: str): + from django.utils import timezone as tz + + now = tz.now() + Task.objects.filter(task_id=task_id).update( + status=TaskStatus.DISPATCHED.value, + updated_at=now, + ) + return now + + @staticmethod + @sync_to_async + def _mark_dispatch_failed(task_id: str, error: str): + from django.utils import timezone as tz + + now = tz.now() + Task.objects.filter(task_id=task_id).update( + status=TaskStatus.FAILED.value, + error=error, + updated_at=now, + ) + return now + def create_task(self, req: TaskCreate) -> Task: """ 创建任务记录: @@ -131,20 +157,15 @@ class TaskDispatcher: ) try: await ws_send(msg) - from django.utils import timezone as tz - task.status = TaskStatus.DISPATCHED.value - task.updated_at = tz.now() - task.save(update_fields=["status", "updated_at"]) + task.error = None + task.updated_at = await self._mark_dispatched(task.task_id) logger.info("任务 %s 已派发", task.task_id) return True except Exception as e: - from django.utils import timezone as tz - task.status = TaskStatus.FAILED.value task.error = f"派发失败: {e}" - task.updated_at = tz.now() - task.save(update_fields=["status", "error", "updated_at"]) + task.updated_at = await self._mark_dispatch_failed(task.task_id, task.error) logger.error("任务 %s 派发失败: %s", task.task_id, e) return False