1. 什么是celery?

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统
Celery 是一个用 Python 编写异步的分布式任务队列,主要用于实时处理和任务调度。不过它的消息中间件是默认选择使用 rabbitMQ ,也可以使用 redis ,它还支持其他的消息队列或者是数据库。

  1. celery组件包括
  1. Celery Beat: 任务调度器,用来调度周期任务。
  2. Producer: 任务生产者,调用 Celery 产生任务。
  3. Broker: 消息中间件,任务消息存进队列,再按序发送给消费者。
  4. Celery Worker: 执行任务的消费者,通常可以进行在多台服务器上运行多个消费者。
  5. Result Backend: 任务处理完成之后保存状态信息和结果,一般是数据库。
  1. 工作原理:

任务模块Task: 包含异步任务和定时任务。异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。
消息中间件Broker: 即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。
任务执行单元Worker : 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它这是实现分布式的核心。
结果储存Backend: 用于存储任务的执行结果,存储也可使用 RabbitMQ, Redis 和 MongoDB 等。

  1. celery的原理图
  2. celery和redis怎么一起用 为什么celery配合redis_异步任务

  3. celery管理与监控

Celery管理和监控功能是通过flower组件实现的,flower组件不仅仅提供监控功能,还提供HTTP API可实现对woker和task的管理。

  1. 启动celery服务步骤
  1. 启动任务工作者worker
  2. 将任务放入celery队列
  3. worker读取队列,并执行任务
  1. 启动一个工作者,创建一个任务队列

celery -A tasks worker --loglevel=info
注释:-A 指定celery名称,loglevel制定log级别

  1. 调度任务

使用delay()或apply_async()方法来调度任务,事实上delay已经封装了apply_async方法