fix(worker): viral_video Celery 任务改用 @shared_task,修复单测在 CI 下 resume_viral_video_pipeline.run 找不到的问题
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m58s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m40s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 5s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 4s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 1m31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m29s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 47s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m2s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 32s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m2s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m31s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m53s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 5m58s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Successful in 13m44s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 15m16s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 29s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 17s

- @celery_app.task 在 conftest mock Task.delay 之后若模块重新加载,decorator 返回的是未绑定原函数而非 Task 实例,导致 .run 方法不存在
- @shared_task(和 lipsync_tts.py 保持一致)在任务被任意 Celery app 加载时自动绑定,测试和生产环境行为一致
- 保留 celery_app import 为 noqa F401,确保 worker_app.celery_app 模块加载时会注册 viral_video tasks
This commit is contained in:
xiaoxia
2026-09-30 00:30:38 +08:00
parent a7d6ba473b
commit c45a2ce9b1
+5 -5
View File
@@ -19,9 +19,9 @@ from __future__ import annotations
import logging
import os
from celery import Task
from celery import Task, shared_task
from celery.exceptions import Retry
from worker_app.celery_app import celery_app
from worker_app.celery_app import celery_app # noqa: F401 - 加载 app 以注册任务
from worker_app.db import SessionLocal
from packages.adapters.sqlalchemy_impl.viral_video_repository import (
@@ -379,7 +379,7 @@ def _step_upload(job: ViralVideoJob, video_path: str) -> str:
# ── 主编排器 ────────────────────────────────────────────────────────────
@celery_app.task(bind=True, max_retries=2, name="worker.run_viral_video_pipeline")
@shared_task(bind=True, max_retries=2, name="worker.run_viral_video_pipeline")
def run_viral_video_pipeline(self: Task, job_id: str) -> dict:
"""爆款视频 10 步流水线编排器。"""
session = None
@@ -452,7 +452,7 @@ def run_viral_video_pipeline(self: Task, job_id: str) -> dict:
session.close()
@celery_app.task(bind=True, max_retries=2, name="worker.resume_viral_video_pipeline")
@shared_task(bind=True, max_retries=2, name="worker.resume_viral_video_pipeline")
def resume_viral_video_pipeline(self: Task, job_id: str) -> dict:
"""用户确认意图后,从断点恢复流水线(步骤 3-10)。"""
session = None
@@ -539,7 +539,7 @@ def resume_viral_video_pipeline(self: Task, job_id: str) -> dict:
session.close()
@celery_app.task(bind=True, max_retries=1, name="worker.run_video_style_analysis")
@shared_task(bind=True, max_retries=1, name="worker.run_video_style_analysis")
def run_video_style_analysis(self: Task, job_id: str) -> dict:
"""独立的视频风格分析任务(v1.3)。"""
session = None