"""AI数字人渲染 Celery 异步任务 — #1798.""" from __future__ import annotations import logging from app.core.celery_app import celery_app from app.dependencies import get_db_session logger = logging.getLogger(__name__) @celery_app.task(bind=True, name="ai_avatar_render.execute", max_retries=2) def execute_ai_avatar_render(self, job_id: str) -> dict: """执行 AI 数字人渲染管线. 进度更新: - 0%: 任务开始 - 20%: 下载对口型视频完成 - 40%: 滤镜链构建完成 - 80%: FFmpeg 渲染完成 - 95%: 上传 OSS 完成 - 100%: 任务完成 """ logger.info("开始执行渲染任务: %s", job_id) self.update_state(state="PROCESSING", meta={"progress": 0, "job_id": job_id}) try: # 获取数据库 session db_gen = get_db_session() db = next(db_gen) try: from app.services.ai_avatar_render_service import AiAvatarRenderService service = AiAvatarRenderService(db) service.execute_render(job_id) finally: try: next(db_gen) except StopIteration: pass return {"status": "completed", "job_id": job_id} except Exception as exc: logger.exception("渲染任务执行异常 [%s]: %s", job_id, exc) self.update_state(state="FAILED", meta={"progress": 0, "error": str(exc)}) raise