From 6cae38dea9505265d501722eec2b187172513d16 Mon Sep 17 00:00:00 2001 From: passthem Date: Sun, 19 Oct 2025 16:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8D=87=20LongTask=20=E7=9A=84?= =?UTF-8?q?=E5=81=A5=E5=A3=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konabot/common/longtask.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/konabot/common/longtask.py b/konabot/common/longtask.py index 3c6f858..618317a 100644 --- a/konabot/common/longtask.py +++ b/konabot/common/longtask.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from contextlib import asynccontextmanager import datetime import json @@ -113,7 +115,7 @@ class LongTaskTarget(BaseModel): class LongTask(BaseModel): uuid: str data_json: str - target: "LongTaskTarget" + target: LongTaskTarget callback: str deadline: datetime.datetime canceled: bool = False @@ -145,12 +147,25 @@ class LongTask(BaseModel): datafile.unhandled.setdefault(self.callback, []).append(self) return - await hdl(self) + success = False + try: + await hdl(self) + success = True + except Exception as e: + logger.exception(e) async with longtask_data() as datafile: datafile.to_handle[self.callback] = [ t for t in datafile.to_handle[self.callback] if t.uuid != self.uuid ] - logger.info(f"LongTask 工作完成 UUID={self.uuid} callback={self.callback}") + if not success: + datafile.unhandled.setdefault(self.callback, []).append(self) + logger.info( + f"LongTask 执行失败 UUID={self.uuid} callback={self.callback}" + ) + else: + logger.info( + f"LongTask 工作完成 UUID={self.uuid} callback={self.callback}" + ) def clean(self): self._aio_task = None