测试极速成片
This commit is contained in:
@@ -47,9 +47,15 @@ def run_export_job_task(self, export_job_id: str) -> str:
|
||||
QUICK_CREATE_QUEUE = "airshelf.quick"
|
||||
|
||||
|
||||
@app.task(bind=True, max_retries=0, soft_time_limit=240, time_limit=270, queue=QUICK_CREATE_QUEUE)
|
||||
# 豆包长思考脚本允许完整跑 30 分钟;硬上限额外留 60 秒让 soft timeout 的
|
||||
# 收尾/落库完成,避免 15 分钟时仍在正常输出却被 worker 强制中断。
|
||||
@app.task(bind=True, max_retries=0, soft_time_limit=1800, time_limit=1860, queue=QUICK_CREATE_QUEUE)
|
||||
def run_quick_script_task(self, quick_job_id: str) -> str:
|
||||
"""脚本生成单独跑,避免把整条极速成片编排堵在一次 SSE 消费里。"""
|
||||
"""脚本生成单独跑,避免把整条极速成片编排堵在一次 SSE 消费里。
|
||||
|
||||
软超时必须长于豆包思考流(允许最长 30 分钟)。短于 HTTP 流超时会 SIGUSR1 掐连接,
|
||||
任务监视器就记成 stream aborted (client disconnected)。
|
||||
"""
|
||||
from celery.exceptions import SoftTimeLimitExceeded
|
||||
|
||||
from apps.projects.models import QuickCreateJob
|
||||
@@ -57,41 +63,36 @@ def run_quick_script_task(self, quick_job_id: str) -> str:
|
||||
|
||||
try:
|
||||
consume_quick_script(quick_job_id)
|
||||
except SoftTimeLimitExceeded:
|
||||
except SoftTimeLimitExceeded as exc:
|
||||
job = QuickCreateJob.objects.select_related("project").filter(id=quick_job_id).first()
|
||||
if job is not None and job.status not in {
|
||||
QuickCreateJob.Status.SUCCEEDED,
|
||||
QuickCreateJob.Status.FAILED,
|
||||
QuickCreateJob.Status.CANCELLED,
|
||||
}:
|
||||
fail_quick_create(job, "脚本生成超时,请稍后重试或进入专业模式查看")
|
||||
raise
|
||||
fail_quick_create(
|
||||
job,
|
||||
"脚本生成时间较长,系统会自动重试",
|
||||
internal_error=f"SoftTimeLimitExceeded: stream aborted (client disconnected); {exc}",
|
||||
)
|
||||
return quick_job_id
|
||||
return quick_job_id
|
||||
|
||||
|
||||
@app.task(bind=True, max_retries=0, queue=QUICK_CREATE_QUEUE)
|
||||
@app.task(bind=True, max_retries=0)
|
||||
def advance_quick_create_task(self, quick_job_id: str) -> str:
|
||||
"""一次只推进一个可重入状态,等待型阶段通过重新入队轮询,不占 worker 睡眠。"""
|
||||
from apps.projects.services.quick_create import advance_quick_create
|
||||
"""一次只推进一个可重入状态,等待型阶段通过重新入队轮询,不占 worker 睡眠。
|
||||
|
||||
编排走默认 celery 队列:worker 即使没听 airshelf.quick,也不会停在「等待开始」。
|
||||
"""
|
||||
from apps.projects.models import QuickCreateJob
|
||||
from apps.projects.services.quick_create import _claim_next_advance, _enqueue_advance, advance_quick_create
|
||||
|
||||
next_delay = advance_quick_create(quick_job_id)
|
||||
if next_delay is not None:
|
||||
from apps.projects.services.quick_create import _claim_next_advance
|
||||
|
||||
if not _claim_next_advance(quick_job_id, int(next_delay)):
|
||||
return quick_job_id
|
||||
try:
|
||||
advance_quick_create_task.apply_async(
|
||||
args=[quick_job_id],
|
||||
countdown=max(1, int(next_delay)),
|
||||
queue=QUICK_CREATE_QUEUE,
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001 — 重排失败不能留下永久“生成中”
|
||||
from apps.projects.models import QuickCreateJob
|
||||
from apps.projects.services.quick_create import fail_quick_create
|
||||
|
||||
job = QuickCreateJob.objects.select_related("project").filter(id=quick_job_id).first()
|
||||
if job is not None:
|
||||
fail_quick_create(job, "生成队列暂时中断,请稍后重试", internal_error=str(exc))
|
||||
raise
|
||||
job = QuickCreateJob.objects.filter(id=quick_job_id).first()
|
||||
if job is not None:
|
||||
_enqueue_advance(job, countdown=max(1, int(next_delay)))
|
||||
return quick_job_id
|
||||
|
||||
Reference in New Issue
Block a user