fix(P0): 修复worker启动崩溃 - celery信号注册方式错误导致死循环重启 #538
Reference in New Issue
Block a user
Delete Branch "fix/p0-worker-startup-crash"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
#535上线后worker启动即崩溃,死循环重启44次,生成任务完全不消费。
根因
_startup.py中使用了@celery_app.on_worker_ready.connect注册信号,但 Celery 5.4.0 的 Celery app 对象没有on_worker_ready这个属性,导致导入模块时 AttributeError,worker启动直接崩。修复
celery.signals导入worker_ready信号@worker_ready.connect注册on_after_configure空钩子celery_app的 import验证
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
Auto merge failed after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually.
代码审查结果 - PR #538
⚠️ 问题(4个需要修改)
apps/api/app/api/routes/task_center.py 第103, 123行:API响应未使用新增的
updated_at字段。updated_at仍然使用task.completed_at or task.started_at or task.created_at的回退逻辑,而没有直接使用本次 PR 新增的task.updated_at字段。这导致数据库层面的updated_at更新(如onupdate触发)无法正确反映给前端,违背了添加该字段的初衷。task.updated_at,即updated_at=format_utc_datetime(task.updated_at)。apps/worker/worker_app/tasks/generation.py 第1412-1420行:在任务执行流程中同步调用清理逻辑,存在严重性能隐患。
generate_video是高频调用的异步任务。在每次任务开始时都调用cleanup_orphan_tasks()(包含数据库查询和可能的更新操作),会显著增加任务延迟,给数据库造成不必要的压力。清理操作应该是低频的后台维护任务,不应阻塞业务流程。_startup.py)或通过 Celery Beat 定时任务执行。apps/worker/worker_app/tasks/_startup.py 第30-39行:数据库 Session 资源泄漏风险。
session = SessionLocal()在try块中创建,但session.close()也在try块中。如果repo.cleanup_stale_running或后续代码抛出异常,session.close()将不会被执行,导致数据库连接泄漏。try...finally...结构确保 Session 一定会被关闭,或者使用上下文管理器。packages/adapters/sqlalchemy_impl/generation_task_repository.py 第236-252行:
cleanup_stale_running方法存在内存溢出(OOM)风险。.all()将所有符合条件的记录加载到内存中,然后循环更新。如果存在大量孤儿任务(如数万条),会消耗大量内存,甚至导致 Worker 崩溃。query(...).update(...)进行批量更新,设置synchronize_session=False,避免加载对象到内存。💡 建议(1个可选)
format_utc_datetime函数对字符串类型的处理较为粗糙。if isinstance(dt, str): return dt直接返回了字符串。如果数据库某处意外返回了不带时区信息的字符串(如 "2023-01-01 00:00:00"),前端依然会解析错误。虽然 SQLAlchemy 通常返回 datetime 对象,但为了防御性编程,建议对字符串也进行简单的格式校验或补充 "Z" 后缀处理。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 20:31:00 | 模型:
285c604994tob4aa6ee4ee🗑️ 预览环境已清理
PR #538 已关闭或合并,对应的预览环境已被清理。