1 什么是 Celery?
1.1 定义
Celery 是一个简单、灵活且可靠的分布式系统,专注于处理大量消息的异步任务队列,同时也支持任务调度。

user(用户)
可以是浏览器里的前端用户,也可以是你的后端服务/脚本/另一个微服务。
他做的一件事:发起一个需要执行的任务,比如:
pythonresult = long_task.delay(123, "abc")这一步不是直接执行
long_task,而是:"把任务交给 Celery 系统去慢慢跑,我只拿一个 task_id 回来。"
AMQP broker(消息中间件/队列)
消息队列(broker),常见的就是:RabbitMQ、Redis(虽然严格不是 AMQP,但 Celery 也支持)、其他 MQ。
它负责:
- 接任务:你的应用调用
.delay()/apply_async(),Celery 把任务序列化后丢到队列里(发给 broker) - 存任务:任务在队列里排队,等待被 worker 消费
- 分发任务:哪个 worker 空下来,会从队列里"领一个任务"走
你可以把 broker 当成:"一个任务仓库 + 排队系统,谁有空谁来领活。"
- 接任务:你的应用调用
celery workers(执行任务的工人)
中间竖着的 1、2、3 … N,就是多个 Celery worker 进程:
- 每个 worker 都是一个独立的后台进程
- 它们都连接到了 broker
- 不停地从队列里取任务 → 执行 → 写结果
它们干的就是:
- 从 broker 取一个 task
- 在本地 Python 进程里执行你定义的函数
- 执行完后把结果状态写到 "task result store"
task result store(任务结果存储)
最右边这个圆柱,是结果存储 backend,可以是:
- Redis
- 数据库(如 PostgreSQL/MySQL)
- Memcached
- RPC backend(直接通过 AMQP 回传)
Celery 中叫 result backend,负责:
存每个任务的:
状态:PENDING / STARTED / SUCCESS / FAILURE / RETRY
返回值:比如你的函数 return 42
异常信息:如果执行时抛异常
支持用户之后查询:
pythonfrom celery.result import AsyncResult res = AsyncResult(task_id) res.status # 当前状态 res.result # 结果或异常 res.get() # 阻塞直到有结果相当于:worker 做完了,把"成绩单"丢到 result store 里,你日后可以拿着 task_id 去查。
1.2 使用场景
Celery 是一个强大的分布式任务队列的异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。
- 异步任务:将耗时操作任务提交给 Celery 去异步执行,比如发送短信/邮件、消息推送、音视频处理等等
- 定时任务:定时执行某件事情,比如每天数据统计
1.3 Celery 的优点
- Simple(简单):Celery 使用和维护都非常简单,并且不需要配置文件。
- Highly Available(高可用):worker 和 client 会在网络连接丢失或者失败时,自动进行重试。并且有的 brokers 也支持"双主"或者"主/从"的方式实现高可用。
- Fast(快速):单个的 Celery 进程每分钟可以处理百万级的任务,并且只需要毫秒级的往返延迟(使用 RabbitMQ, librabbitmq, 和优化设置时)。
- Flexible(灵活):Celery 几乎每个部分都可以扩展使用,自定义池实现、序列化、压缩方案、日志记录、调度器、消费者、生产者、broker 传输等等。
1.4 Celery 安装
你可以安装 Celery 通过 Python 包管理平台(PyPI)或者源码安装。
使用 pip 安装:
pip install -U Celery