Loading

Celery介绍

Celery官方文档:http://docs.celeryproject.org/

Celery是什么?

Celery 是一个 基于python开发的分布式异步消息任务队列,

通过它可以轻松的实现任务的异步处理,

如果你的业务场景中需要用到异步任务,就可以考虑使用celery,

举几个实例场景中可用的

例子:

  • 异步任务:将耗时的操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音频处理等等
  • 做一个定时任务,比如每天定时执行爬虫爬取指定内容
  • 还可以使用celery实现简单的分布式爬虫系统等等

Celery 在执行任务时需要通过一个消息中间件(Broker)来接收和发送任务消息,

以及存储任务结果, 一般使用rabbitMQ or Redis,后面会讲

Celery的优点

  • 简单:Celery 易于使用和维护,并且它 不需要配置文件 ,并且配置和使用还是比较简单的(后面会讲到配置文件可以有)
  • 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
  • 快速:单个 Celery 进程每分钟可处理数以百万计的任务,而保持往返延迟在亚毫秒级
  • 灵活: Celery 几乎所有部分都可以扩展或单独使用,各个部分可以自定义。

Celery的执行流程及架构

image-20240518121809454

Celery采用经典的生产者消费者模型,主要由以下部分组成

Celery Beat

  • 任务调度器,Beat进程会读取配置文件的内容
  • 周期性的将配置中到期需要执行的任务发送给任务队列

Producer

  • 需要在队列中进行的任务,一般由用户,触发器或者其他操作将任务入队,
  • 然后交由workers进行处理。
  • 调用了Celery提供的API,函数或者装饰器而产生任务并交给任务队列处理的都是生产者

Borker

  • 即消息中间件,在这指代任务队列本身,通常是redis或RabbitMQ。
  • Celery扮演了生产者和消费者的角色,
  • broker就是生产者和消费者存放/获取产品(任务)的地方(队列)

Worker

  • 执行任务的消费者,从Broker中取出任务并执行
  • 通常会在多台服务器运行多个消费者来提高执行效率

Backend

  • 任务处理完后保存状态信息或结果的地方
  • Celery 默认已支持 Redis、RabbitMQ、MongoDB、Django ORM、SQLAlchemy 等方式。

实际使用

实际应用中,用户在web前端发起一个请求

我们只需要将请求所要求处理的任务丢入消息队列broker中

由空闲的worker去处理

处理的结果会暂存在后台数据库backend中。

我们可用在一台或多台及其上同时起多个worker进程来实现分布式的并行处理任务

posted @ 2024-05-18 12:34  HuangQiaoqi  阅读(29)  评论(0编辑  收藏  举报