SuperAPI AI 工具集

celery-patterns

编程与开发

查看项目

更新于 10-16 02:33

技能介绍

用途:为 Django 项目提供 Celery 后台任务与定时作业的实现模式与最佳实践,适合需要异步处理、重试与周期调度的场景。

核心原则:任务需幂等(重复执行结果一致);参数应传主键 ID 而非模型实例,且必须可 JSON 序列化;失败必须记录日志,不能静默吞异常;对外部服务重试应采用指数退避。

任务设计:将任务放在 apps/<app>/tasks.py;可复用任务用 @shared_task;需要重试、任务 ID 或状态更新时用 bind=True;为任务签名加类型提示;记录任务开始、完成与失败日志。参数保持简单可序列化(str、int、dict、list),任务开始时校验引用对象是否存在。

重试策略:内部可预测恢复的操作(如数据库锁)用固定延迟;可能限流或恢复时间不定的外部 API 用指数退避;校验错误、业务逻辑失败等永久错误不重试。配置上按可接受总等待时间设置 max_retries,用 retry_jitter=True 防止惊群,用 retry_backoff_max 限制最大等待,用 autoretry_for 对特定异常自动重试。

幂等模式:处理前查状态,已完成则跳过;用状态字段(pending → processing → complete/failed)配合 select_for_update() 保证并发安全;用数据库唯一约束防止重复处理。

周期任务(Beat):在 config/celery.py 的 beat_schedule 中配置调度;时间型用 crontab(),间隔型用浮点秒数;周期任务保持轻量,重活派生子任务。

应避免的反模式:传模型实例而非 ID;非幂等操作;静默异常处理;缺少生命周期日志;长时间任务无进度更新;对永久失败重试。

命令:Worker:uv run celery -A config worker -l info;Beat:uv run celery -A config beat -l info;监控:uv run celery -A config flower。

限制:资料未提供具体版本要求、依赖安装步骤、配置示例及兼容性说明。