From 25bfaf718e2abe623346a65dd1ed472762a0f686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=80=E6=A2=A6?= <3501646051@qq.com> Date: Thu, 2 Apr 2026 12:42:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20ValidationQueue=20?= =?UTF-8?q?=E9=87=8D=E5=90=AF=E6=81=A2=E5=A4=8D=EF=BC=9A=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=97=B6=E5=94=A4=E9=86=92=20Worker=20=E5=A4=84=E7=90=86=20pen?= =?UTF-8?q?ding=20=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:服务重启后,reset_processing() 将中断任务恢复为 pending, 但没有发送信号唤醒 Worker,导致任务永远挂起。 修复:在 start() 中,启动 Worker 后根据 pending 任务数量发送信号, 确保恢复的任务能被立即消费和验证。 --- core/tasks/queue.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/tasks/queue.py b/core/tasks/queue.py index added0e..072453d 100644 --- a/core/tasks/queue.py +++ b/core/tasks/queue.py @@ -61,6 +61,12 @@ class ValidationQueue: for i in range(self.worker_count): self._workers.append(asyncio.create_task(self._worker_loop(i))) + + # 唤醒 Worker 处理恢复的 pending 任务 + if pending: + for _ in range(min(pending, self.worker_count)): + self._signal.put_nowait(None) + logger.info(f"ValidationQueue started with {self.worker_count} workers") async def stop(self):