第一次提交
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
"""启动时的清理工作。"""
|
||||
import logging
|
||||
|
||||
from sqlalchemy import update
|
||||
|
||||
from app.db import SessionLocal
|
||||
from app.models.job import JobStatus, ProcessingJob
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# 进程重启后不可能再继续的中间状态
|
||||
_STALE_STATUSES = (
|
||||
JobStatus.pending,
|
||||
JobStatus.ocr_running,
|
||||
JobStatus.ai_running,
|
||||
)
|
||||
|
||||
|
||||
async def fail_stale_jobs() -> int:
|
||||
"""把残留的进行中任务标记为失败。
|
||||
|
||||
任务跑在 BackgroundTasks 里,进程重启就没了。不清理的话这些任务会永远
|
||||
停在 pending/*_running,前端会一直轮询下去。
|
||||
"""
|
||||
async with SessionLocal() as db:
|
||||
result = await db.execute(
|
||||
update(ProcessingJob)
|
||||
.where(ProcessingJob.status.in_(_STALE_STATUSES))
|
||||
.values(
|
||||
status=JobStatus.failed,
|
||||
error_message="服务重启,任务中断,请重新上传",
|
||||
)
|
||||
)
|
||||
await db.commit()
|
||||
count = result.rowcount or 0
|
||||
if count:
|
||||
logger.info("已清理 %d 个残留任务", count)
|
||||
return count
|
||||
Reference in New Issue
Block a user