Celery:Python 分布式任务队列
Celery 是 Python 生态中运行时间最长的分布式任务队列项目之一,目前 Star 数为 28,573。这个项目从 2009 年开始维护,至今已经超过十五年。
后端开发里,异步任务是绕不开的需求。发邮件、处理图片、生成报表,这些操作如果放在主请求里同步执行,用户要等很久。放到后台异步跑,又需要一套任务调度机制。Celery 就是干这个的。

它的工作方式很简单:客户端把任务封装成消息,丢进队列;worker 进程持续监听队列,拿到消息就执行。消息中间件负责在两端之间传递,常用的有 RabbitMQ 和 Redis。
这套架构可以水平扩展。多个 worker 消费同一个队列,多个 broker 组成集群,单机、多机、跨数据中心都能部署。Celery 本身是 Python 项目,但协议开放,Node.js、Go、Rust 等语言都有对应的客户端。
定义一个任务的代码量很少:
from celery import Celery
app = Celery('hello', broker='amqp://guest@localhost//')
@app.task
def hello():
return 'hello world'
就这几行,一个异步任务就配置好了。
Celery 能流行这么多年,有几个原因。
一是生态积累足够长。Django、Flask、FastAPI 这些主流框架都有现成的集成方案,接入成本低。文档也写得详细,新手跟着教程走一遍就能上手。
二是功能覆盖广。并发模型支持 Prefork、Eventlet、gevent;序列化支持 json、pickle、msgpack;结果可以存到 Redis、Memcached、SQLAlchemy 等多种后端。各种场景基本都能找到对应的配置。
三是可靠性经过验证。worker 和客户端断连会自动重试,部分 broker 支持主从复制。这让它在生产环境里能扛住压力。

目前 5.6.x 版本支持 Python 3.9 到 3.13,安装用 pip 就行。也可以按需安装扩展包,比如 pip install "celery[redis]" 同时装 Redis 支持。生产环境推荐 RabbitMQ 或 Redis 作为 broker,本地开发甚至可以用 SQLite。
这个项目也有一些限制。官方不正式支持 Windows,虽然实际能跑。维护资金有限,新功能推进不算快。但对于已经验证过的用例,稳定性没有问题。
如果你用 Python 写后端,需要处理异步任务、定时任务或分布式计算,Celery 是个务实的选择。它不是最新的项目,但经过了长时间的生产环境检验。在看重稳定性的场景里,这反而是一项优势。
最新的项目,但经过了长时间的生产环境检验。在看重稳定性的场景里,这反而是一项优势。
4109

被折叠的 条评论
为什么被折叠?



