Celery 调研:28,767 stars 的 Python 分布式任务队列 17 年常青树,Blacksmith 接手后 5.6.x 还在撑住 Python 生态半边天

71次阅读
Celery 调研:28,767 stars 的 Python 分布式任务队列 17 年常青树,Blacksmith 接手后 5.6.x 还在撑住 Python 生态半边天

它不是最酷的,但它 最稳。Python 后端要做异步任务、定时任务、分布式工作流,几乎绕不开 Celery。


写在前面

如果你写 Python 后端,迟早会撞上这三个需求:

  1. 发邮件别阻塞 HTTP 请求——用户点了 ” 注册 ”,但邮件要 3 秒才发完,不能让用户等
  2. 定时跑报表——每天凌晨 2 点跑昨天的 GMV 聚合
  3. 跨机器分摊任务——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 / 队列
  • CLIcelery -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')

七、风险与坑

  1. 庞大的配置面 :Celery 配置项 100+, 新手需要 1-2 周消化。新手建议从 Redis broker + 小项目起步。
  2. Python 3.9 终点 :5.6.x 是最后支持 Python 3.9 的版本。 新项目起步 = Python 3.10+ + Celery 5.7.x
  3. 协议文档不完整 :跨语言客户端(gocelery / rusty-celery)文档比 Python 端少很多, 出问题排查困难
  4. Broker 安全 :Celery 默认 broker 不加密, 公网部署必须配 SSL / mTLS
  5. 不死不活的 issue:800+ open issues 里有大量 ” 功能请求 + 历史遗留 ”,新功能希望渺茫——Blacksmith 主要精力在商业版。
  6. Result Backend 选错代价高 :用 DB 做 backend = 表爆炸;用 Redis = 内存爆炸。 生产环境建议独立 Redis 实例
  7. asyncio 友好度差:Celery 是同步框架,FastAPI / Starlette 用户用 arq / Taskiq 更顺
  8. Windows 不支持:官方明确不支持 Windows。
  9. 依赖包多 :依赖 kombu / billiard / amqp / redis / pytz / vine 等 10+ 包, 包体积 ~3MB

八、总结

3 个 ” 最值得装 ” 的理由

  1. Python 生态事实标准——17 年沉淀 + 28K stars + 几乎所有 Python Web 框架官方推荐,Django 文档首推 Celery
  2. 多 broker + 多语言 + 跨机器——单一 API 切 RabbitMQ / Redis / SQS,Python 写 task 任意语言调
  3. 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 的 ” 标准 ” 绑架。


参考

  1. celery/celery GitHub
  2. Celery 官方文档
  3. PyPI · celery
  4. v5.6.3 Release
  5. Blacksmith 接手公告
  6. Flower 监控
  7. 官方 Docker 镜像
  8. Cube.js 调研:20K stars 的开源语义层
  9. Refine 调研:35K stars 的开源版 Retool
  10. Ruflo 调研:67K stars 的 Agent meta-harness
正文完