提升 LongTask 的健壮性
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-10-19 16:54:59 +08:00
parent 8594b59783
commit 6cae38dea9

View File

@ -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