
它不是最酷的,但它 最稳。Python 后端要做异步任务、定时任务、分布式工作流,几乎绕不开 Celery。
写在前面
如果你写 Python 后端,迟早会撞上这三个需求:
- 发邮件别阻塞 HTTP 请求——用户点了 ” 注册 ”,但邮件要 3 秒才发完,不能让用户等
- 定时跑报表——每天凌晨 2 点跑昨天的 GMV 聚合
- 跨机器分摊任务——10 万张图片要缩略图,单机跑到明天,多机并发
Celery(celery/celery)就是为这三个需求而生的 Python 分布式任务队列。
28,767 stars、17 年老牌项目(2009-04 首次 commit)、BSD-3-Clause 协议、Python 99%、v5.6.3 5 天前还在更新、Blacksmith 2025 年接手维护。
它是 Python 生态 事实标准——Django / FastAPI / Flask / Pyramid 的官方推荐方案,Instagram、Pinterest、Mozilla、Robinhood 都在用。
本文 10 分钟讲清楚:Celery 是什么、不是什么、怎么用、跟什么项目竞争、值不值得你下一个项目装上。
一、它解决什么问题
一句话:Celery 让 Python 后端可以 ” 异步 + 定时 + 分布式 ” 地处理任务,把 ” 立即执行 ” 和 ” 延迟 / 后台执行 ” 分离。
官方定义:
“Task queues are used as a mechanism to distribute work across threads or machines. A task queue’s input is a unit of work, called a task, dedicated worker processes then constantly monitor the queue for new work to perform. Celery communicates via messages, usually using a broker to mediate between clients and workers.”
基本信息
| 维度 | 数值 |
|---|---|
| 仓库 | celery/celery |
| 定位 | Distributed Task Queue |
| Stars | 28,767 |
| Forks | 5,124 |
| 协议 | BSD-3-Clause(代码)+ CC BY-SA 4.0(文档) |
| 主语言 | Python 99% |
| 首次 commit | 2009-04-24(17 年) |
| 最新版 | v5.6.3(2026-03-26) |
| 最近 commit | 2026-08-05(2 天前) |
| Open Issues | 804 |
| Watchers | 449 |
| 官网 | https://docs.celeryq.dev |
| PyPI | https://pypi.org/project/celery/ |
| 维护商 | Blacksmith(2025 年接手) |
| Sponsor | Blacksmith / CloudAMQP / Upstash / Dragonfly |
关键观察:28K stars + 17 年历史 + 2 天前还在 push + 800+ open issues = Python 生态最稳定的任务队列。这是经过漫长时间验证的 ” 老牌 ” 项目。
二、核心能力:4 大场景 + 5 大 broker + 3 种任务类型
1. 核心能力图
Client (Web / Script / Cron)
↓
@app.task 装饰器
↓
Broker (RabbitMQ / Redis / SQS / Kafka)
↓
Worker Process (多机并行)
↓
Result Backend (Redis / DB / S3)
2. 3 种任务类型
| 类型 | 触发方式 | 典型场景 |
|---|---|---|
| 异步任务 | task.delay() / task.apply_async() |
发邮件 / 生成缩略图 / 推送通知 |
| 定时任务 | beat_schedule 配置 |
每日报表 / 定时清理 / 周期同步 |
| 工作流 | Canvas(chain/group/chord/chunks) | 复杂业务管道(订单 → 支付 → 库存 → 物流) |
3. 5 大 Broker 支持
| Broker | 特性 | 适用 |
|---|---|---|
| RabbitMQ | 完整特性、生产首选 | 高可靠 / 复杂路由 |
| Redis | 简单 / 性能强 / 实验性 broker 功能 | 中小规模 / 快速起步 |
| Amazon SQS | AWS 原生 / 托管 | AWS 生态 |
| Apache Kafka | 大数据流 | 已有 Kafka 集群 |
| gRPC / Memcached / SQLite | 实验性 | 本地开发 / 边缘场景 |
约定:RabbitMQ 完整特性 / Redis 简单可靠 / SQS 托管省心。
4. 5 大 Result Backend
- Redis(快 + 简单)
- SQLAlchemy / Django ORM(数据库)
- Elasticsearch(搜索 + 审计)
- S3 / Azure Blob(大规模)
- Memcached / File(轻量)
5. 4 大核心特性
| 特性 | 描述 |
|---|---|
| 多协议 | 同一份协议被 node-celery / gocelery / rusty-celery / celery-php 实现,跨语言客户端 |
| 水平扩展 | 增加 worker 节点即可线性扩展(理论无上限) |
| Webhooks | 客户端入队 URL,worker 拉取——任意语言都可对接 |
| Canvas 工作流 | chain / group / chord / chunks 组合复杂任务管道 |
6. 监控与运维
- Flower(官方推荐 Web 监控)—— 实时看 worker / task / 队列
- CLI:
celery -A proj inspect/stats/control查看 worker 状态 - Prometheus exporter(社区方案)
- 信号机制——
task_prerun/task_success/task_failure钩子
三、差异化能力:Blacksmith 接手 + 多语言协议 + 实战 17 年
1. Blacksmith 2025 接手(重要变化)
官方公告(来自 LinkedIn / README sponsor):
“Celery is now powered by Blacksmith” —— Asif Saif Uddin / Tomer Nosrati 2025 公开
Blacksmith 是一家专注 ” 开发者基础设施工具 ” 的公司,提供:
- Blacksmith for Celery —— 增强版(商业版),自动 worker 扩缩容 + 队列监控
- 与开源 Celery 兼容(无需代码改动)
开源版本仍由 Blacksmith 维护 (核心团队仍负责), 这是开源 + 商业分层的健康样本——跟 Cube.js 的 ” 开源 + Cube Cloud” 一个套路。
2. 跨语言协议(Celery Wire Protocol)
Celery 设计哲学:任务队列协议可以被任何语言实现。
# Python 客户端
@app.task
def add(x, y):
return x + y
add.delay(4, 4) # 入队 → broker → worker
其他语言客户端:
| 语言 | 库 | 状态 |
|---|---|---|
| Node.js | node-celery | 活跃 |
| Go | gocelery / gopher-celery | 活跃 |
| Rust | rusty-celery | 活跃 |
| PHP | celery-php | 维护中 |
| Java | spring-celery-starter | 社区 |
意义:Python 写 task,业务方用任意语言调——你的 Go 微服务可以把 ” 重计算 ” 丢给 Python Celery worker。
3. 17 年实战验证(生态事实标准)
明星用户(公开案例):
- Instagram(图片处理管道)
- Pinterest(爬虫 + 索引)
- Mozilla(Firefox 同步)
- Robinhood(金融交易异步处理)
- OpenStack(基础设施编排)
- Sentry(错误聚合)
生态集成:
- Django(官方推荐,celery[redis] 一键集成)
- FastAPI(社区方案,fastapi-celery)
- Flask(社区方案)
- Pyramid(官方方案)
这是 17 年沉淀的 ” 事实标准 ”——不是最新最酷的,但 最稳最全。
4. Celery 5.6.x 收尾(关键时间点)
README 顶部明确:
“This is the last version of Celery which will support Python 3.9. Celery v5.7.x will work on Python 3.10 or newer versions.”
如果你在用 Python 3.9,5.6.x 是你的终点。新项目起步 = 5.7.x + Python 3.10+。
四、实战:3 步跑通一个最小 Celery
Step 1:装依赖 + 起 Redis
pip install "celery[redis]"
docker run -d -p 6379:6379 redis:7-alpine
Step 2:定义 task + 启动 worker
# tasks.py
from celery import Celery
app = Celery(
"tasks",
broker="redis://localhost:6379/0",
backend="redis://localhost:6379/1",
)
@app.task
def add(x, y):
return x + y
@app.task
def send_email(to, subject, body):
# 模拟发邮件
import time
time.sleep(3)
print(f"Sent to {to}: {subject}")
return True
起 worker:
celery -A tasks worker --loglevel=info
Step 3:调用任务
# 异步调用
result = add.delay(4, 4)
print(result.get(timeout=10)) # 输出 8
# 定时任务(Beat)# celeryconfig.py
beat_schedule = {
"daily-report": {
"task": "tasks.send_email",
"schedule": 24 * 60 * 60, # 每天
"args": ("admin@example.com", "Daily Report", "..."),
},
}
# 启动 beat
# celery -A tasks beat --loglevel=info
3 步 = 5 分钟,跑通 ” 异步 + 定时 + 持久化 ” 完整链路。
进阶:Canvas 工作流
from celery import chain
# 任务管道:上传 → 压缩 → 推 CDN
workflow = chain(upload_to_s3.s(local_path),
compress_image.s(),
push_to_cdn.s(bucket),
)
workflow.apply_async()
五、对比:Python 任务队列的 5 个玩家
| 项目 | 定位 | 协议 | Stars | 一句话差异 |
|---|---|---|---|---|
| Celery | 通用分布式任务队列 | BSD-3-Clause | 28,767 | 多 broker + 多语言协议 + 17 年实战 |
| RQ (Redis Queue) | 轻量 Redis 队列 | BSD-3-Clause | 10K+ | 极简,只支持 Redis |
| Dramatiq | 现代 Python 任务队列 | LGPL | 4K+ | 类型注解 + 性能 + 现代化 |
| huey | 小型任务队列 | MIT | 5K+ | 单文件 / 轻量 |
| Django-Q / django-q2 | Django 集成 | BSD-3-Clause | 2K+ | 专为 Django 设计 |
| arq | asyncio 任务队列 | MIT | 2K+ | 异步原生,跟 FastAPI 友好 |
| Taskiq | 异步原生任务队列 | Apache-2.0 | 2K+ | 现代 asyncio 框架 |
关键判断
Celery vs RQ:
- 你的项目需要 RabbitMQ / 复杂路由 / 多语言 → Celery
- 你的项目只用 Redis + 简单队列 → RQ(少 50% 复杂度)
Celery vs Dramatiq:
- 你的项目是历史遗留 + 多 broker → Celery
- 你的项目是 2026 年新起步 + 想要现代 API → Dramatiq
Celery vs arq / Taskiq:
- 你的项目是同步 Web(Flask / Django)→ Celery
- 你的项目是 async Web(FastAPI / Starlette)→ arq / Taskiq
Celery vs Django-Q:
- 你用 Django + 简单队列 → Django-Q(集成度更高)
- 你用 Django + 高可用 / 多 broker → Celery
适合谁
| 场景 | 选 Celery? |
|---|---|
| Python 后端异步任务(邮件 / 推送 / 缩略图) | ✅ 强烈推荐 |
| 定时任务(每天 / 每周 / 每月跑) | ✅ 强烈推荐 |
| 跨机器分布式任务(worker 集群) | ✅ 强烈推荐 |
| 多语言系统(Python worker + Go 客户端) | ✅ 跨语言协议 |
| 已有 Django / FastAPI / Flask 项目 | ✅ 生态成熟 |
| 跨 broker 迁移(Redis → RabbitMQ) | ✅ 改一行配置 |
| Python 3.13+ 新项目 | ⚠️ 等 5.7.x |
| 异步原生 FastAPI(asyncio) | ❌ arq / Taskiq |
| 简单 Redis 队列即可 | ❌ RQ |
| 想要 ” 现代 Python API + 类型注解 ” | ❌ Dramatiq |
六、编辑器与工具能力
| 能力 | 实现方式 |
|---|---|
| 任务定义 | @app.task 装饰器 |
| 异步调用 | task.delay(*args) / task.apply_async(args, eta, countdown, expires) |
| 定时任务 | beat_schedule 配置(crontab / seconds / timedelta) |
| Canvas | chain / group / chord / chunks 组合任务 |
| 路由 | task_routes 配置任务到不同队列 |
| 优先级 | task_priority + broker 支持 |
| 限流 | rate_limit='10/m'(每分钟 10 次) |
| 超时 | task_time_limit / task_soft_time_limit |
| 重试 | autoretry_for / retry_backoff / max_retries |
| 状态查询 | result.status / result.ready() / result.get() |
| 任务钩子 | task_prerun / task_success / task_failure / task_retry |
| CLI | celery -A proj inspect/stats/control/purge |
| Web 监控 | Flower(官方推荐) |
| Prometheus | celery-exporter 社区方案 |
| Django 集成 | django-celery-results + celery[redis] |
| FastAPI 集成 | fastapi-celery 社区 |
高级特性速查
| 功能 | 实现 |
|---|---|
| 任务优先级 | apply_async(priority=0)(broker 支持才行) |
| ETA 调度 | apply_async(eta=datetime(2026, 8, 8, 10)) |
| 任务过期 | apply_async(expires=3600) |
| 消息压缩 | broker_use_ssl + task_serializer='msgpack' |
| 任务序列化 | json / pickle / msgpack / yaml |
| Webhooks | apply_async(link='https://hook.url') |
七、风险与坑
- 庞大的配置面 :Celery 配置项 100+, 新手需要 1-2 周消化。新手建议从 Redis broker + 小项目起步。
- Python 3.9 终点 :5.6.x 是最后支持 Python 3.9 的版本。 新项目起步 = Python 3.10+ + Celery 5.7.x。
- 协议文档不完整 :跨语言客户端(gocelery / rusty-celery)文档比 Python 端少很多, 出问题排查困难。
- Broker 安全 :Celery 默认 broker 不加密, 公网部署必须配 SSL / mTLS。
- 不死不活的 issue:800+ open issues 里有大量 ” 功能请求 + 历史遗留 ”,新功能希望渺茫——Blacksmith 主要精力在商业版。
- Result Backend 选错代价高 :用 DB 做 backend = 表爆炸;用 Redis = 内存爆炸。 生产环境建议独立 Redis 实例。
- asyncio 友好度差:Celery 是同步框架,FastAPI / Starlette 用户用 arq / Taskiq 更顺。
- Windows 不支持:官方明确不支持 Windows。
- 依赖包多 :依赖 kombu / billiard / amqp / redis / pytz / vine 等 10+ 包, 包体积 ~3MB。
八、总结
3 个 ” 最值得装 ” 的理由
- Python 生态事实标准——17 年沉淀 + 28K stars + 几乎所有 Python Web 框架官方推荐,Django 文档首推 Celery
- 多 broker + 多语言 + 跨机器——单一 API 切 RabbitMQ / Redis / SQS,Python 写 task 任意语言调
- Blacksmith 接手后路线清晰 ——开源 + 商业双轨,5.6.x 还在维护 + 5.7.x 路线图持续, 未来 5 年可放心用
适用与不适用
| 飞熊读者应该装 | 飞熊读者应该看别家 |
|---|---|
| Python 后端 + 异步任务 | FastAPI asyncio 用户 → arq |
| 定时任务 / 报表生成 | 简单 Redis 队列 → RQ |
| Django / FastAPI 项目 | 现代 Python API + 类型 → Dramatiq |
| 多语言异构系统 | Django 简单场景 → django-q2 |
一句话建议
如果你的 Python 后端要发邮件 / 跑报表 / 缩略图 / 异步处理,Celery 装起来 。从 Redis broker 起步,5 分钟跑通。 但如果你只用 FastAPI + asyncio,考虑 arq / Taskiq——别被 Celery 的 ” 标准 ” 绑架。