refactor(#775): 禁止API直接调用Worker任务函数,必须走Celery队列或shared层 #786

Merged
xiaoxia merged 1 commits from refactor/no-direct-worker-imports into develop 2026-07-23 22:34:51 +08:00
Owner

变更内容

代码质量专项P0第二单:#775 禁止API直接调用Worker任务函数

问题

API层存在5处直接import Worker任务函数的违规:

  1. templates_editor.py - run_ai_recommend 同步直接调用
  2. templates_editor.py - run_generate_cover 同步直接调用
  3. tts.py - process_tts_segment_synthesis.delay() import耦合
  4. tts.py - process_tts_synthesis.delay() import耦合
  5. voice_clones.py - process_voice_clone.delay() import耦合

修复方案

AI推荐/封面生成(同步调用场景):

  • 核心逻辑整体迁移到 packages/shared/ai_service.py
  • API端从shared层导入,不再触碰worker代码
  • Worker端 ai_tasks.py 改为 re-export,保持向后兼容

TTS/音色克隆(异步任务场景):

  • 改用 celery_app.send_task() 方式,通过任务名发送
  • 与ingest/classification/render等现有范式一致
  • 消除API对worker_app.tasks的import依赖

验证

  • 全量单测:4383 passed, 8 skipped
  • AI任务单测:22 passed
  • API端零直接import worker代码
## 变更内容 代码质量专项P0第二单:#775 禁止API直接调用Worker任务函数 ### 问题 API层存在5处直接import Worker任务函数的违规: 1. `templates_editor.py` - `run_ai_recommend` 同步直接调用 2. `templates_editor.py` - `run_generate_cover` 同步直接调用 3. `tts.py` - `process_tts_segment_synthesis.delay()` import耦合 4. `tts.py` - `process_tts_synthesis.delay()` import耦合 5. `voice_clones.py` - `process_voice_clone.delay()` import耦合 ### 修复方案 **AI推荐/封面生成(同步调用场景):** - 核心逻辑整体迁移到 `packages/shared/ai_service.py` - API端从shared层导入,不再触碰worker代码 - Worker端 `ai_tasks.py` 改为 re-export,保持向后兼容 **TTS/音色克隆(异步任务场景):** - 改用 `celery_app.send_task()` 方式,通过任务名发送 - 与ingest/classification/render等现有范式一致 - 消除API对worker_app.tasks的import依赖 ### 验证 - 全量单测:4383 passed, 8 skipped - AI任务单测:22 passed - API端零直接import worker代码
xiaoxia added 1 commit 2026-07-23 21:49:05 +08:00
refactor(#775): 禁止API直接调用Worker任务函数,必须走Celery队列或shared层
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 16s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 28s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 46s
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 / Validate - Migration (alembic) (pull_request) Successful in 1m26s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m28s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m13s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 24s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m1s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 3m23s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m29s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m16s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 6m15s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 12m59s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 14s
605b9cb1d4
- AI推荐/封面生成核心逻辑迁移到packages/shared/ai_service.py
  API端从shared层调用,不再import worker代码
  Worker端ai_tasks.py改为re-export,保持向后兼容
- TTS合成/音色克隆任务改用celery_app.send_task()方式
  与ingest/classification等现有范式一致
  消除API对worker_app.tasks的直接import依赖
- 测试patch路径同步更新到packages.shared.ai_service
- 全量单测4383 passed, 8 skipped
Collaborator

代码审查结果 - PR #786

⚠️ 问题(1个需要修改)

  1. packages/shared/ai_service.py 第37行:在同步函数 _fallback_recommend_clips 中使用了 time.sleep(0.5)
    • 问题描述:该函数被 API 路由 editor_ai_recommend 同步调用。在 Web 请求处理线程中休眠 0.5 秒会阻塞工作线程,在高并发场景下会显著降低 API 吞吐量,甚至可能导致服务响应超时。
    • 修改建议:移除 time.sleep 调用。如果是为了模拟耗时,应仅在测试环境中使用,或改为异步实现(如 asyncio.sleep),但考虑到这是降级逻辑,建议直接移除休眠以快速返回结果。

💡 建议(2个可选)

  1. apps/api/app/api/routes/tts.py 第186行:使用硬编码字符串发送 Celery 任务。
    • 具体内容:代码使用 celery_app.send_task("worker.process_tts_segment_synthesis", ...)。如果 Worker 端的任务名称或命名空间发生变更,此处的硬编码字符串将导致任务调度失败。建议将任务名称定义为常量,或确保与 Worker 注册名称严格一致。
  2. apps/worker/worker_app/tasks/ai_tasks.py 第26行:在 __all__ 中暴露了内部私有函数。
    • 具体内容__all__ 列表中包含了 _call_ai_recommend_service_fallback_recommend_clips 等带下划线的私有函数。这违反了封装原则,使得外部模块可以直接依赖内部实现细节。建议仅暴露公共接口 run_ai_recommendrun_generate_cover

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 13:53:21 | 模型:

## 代码审查结果 - PR #786 ### ⚠️ 问题(1个需要修改) 1. **packages/shared/ai_service.py 第37行**:在同步函数 `_fallback_recommend_clips` 中使用了 `time.sleep(0.5)`。 - **问题描述**:该函数被 API 路由 `editor_ai_recommend` 同步调用。在 Web 请求处理线程中休眠 0.5 秒会阻塞工作线程,在高并发场景下会显著降低 API 吞吐量,甚至可能导致服务响应超时。 - **修改建议**:移除 `time.sleep` 调用。如果是为了模拟耗时,应仅在测试环境中使用,或改为异步实现(如 `asyncio.sleep`),但考虑到这是降级逻辑,建议直接移除休眠以快速返回结果。 ### 💡 建议(2个可选) 1. **apps/api/app/api/routes/tts.py 第186行**:使用硬编码字符串发送 Celery 任务。 - **具体内容**:代码使用 `celery_app.send_task("worker.process_tts_segment_synthesis", ...)`。如果 Worker 端的任务名称或命名空间发生变更,此处的硬编码字符串将导致任务调度失败。建议将任务名称定义为常量,或确保与 Worker 注册名称严格一致。 2. **apps/worker/worker_app/tasks/ai_tasks.py 第26行**:在 `__all__` 中暴露了内部私有函数。 - **具体内容**:`__all__` 列表中包含了 `_call_ai_recommend_service`、`_fallback_recommend_clips` 等带下划线的私有函数。这违反了封装原则,使得外部模块可以直接依赖内部实现细节。建议仅暴露公共接口 `run_ai_recommend` 和 `run_generate_cover`。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 13:53:21 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 389d1e4401 into develop 2026-07-23 22:34:51 +08:00
xiaoxia deleted branch refactor/no-direct-worker-imports 2026-07-23 22:34:52 +08:00

🗑️ 预览环境已清理

PR #786 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #786 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.