- 什么是celery?
Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统
Celery 是一个用 Python 编写异步的分布式任务队列,主要用于实时处理和任务调度。不过它的消息中间件是默认选择使用 rabbitMQ ,也可以使用 redis ,它还支持其他的消息队列或者是数据库。
- celery组件包括
- Celery Beat: 任务调度器,用来调度周期任务。
- Producer: 任务生产者,调用 Celery 产生任务。
- Broker: 消息中间件,任务消息存进队列,再按序发送给消费者。
- Celery Worker: 执行任务的消费者,通常可以进行在多台服务器上运行多个消费者。
- Result Backend: 任务处理完成之后保存状态信息和结果,一般是数据库。
- 工作原理:
任务模块Task: 包含异步任务和定时任务。异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。
消息中间件Broker: 即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。
任务执行单元Worker : 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它这是实现分布式的核心。
结果储存Backend: 用于存储任务的执行结果,存储也可使用 RabbitMQ, Redis 和 MongoDB 等。
- celery的原理图
- celery管理与监控
Celery管理和监控功能是通过flower组件实现的,flower组件不仅仅提供监控功能,还提供HTTP API可实现对woker和task的管理。
- 启动celery服务步骤
- 启动任务工作者worker
- 将任务放入celery队列
- worker读取队列,并执行任务
- 启动一个工作者,创建一个任务队列
celery -A tasks worker --loglevel=info
注释:-A 指定celery名称,loglevel制定log级别
- 调度任务
使用delay()或apply_async()方法来调度任务,事实上delay已经封装了apply_async方法