Celery官方文档:http://docs.celeryproject.org/
Celery是什么?
Celery 是一个 基于python开发的分布式异步消息任务队列,
通过它可以轻松的实现任务的异步处理,
如果你的业务场景中需要用到异步任务,就可以考虑使用celery,
举几个实例场景中可用的
例子:
- 异步任务:将耗时的操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音频处理等等
- 做一个定时任务,比如每天定时执行爬虫爬取指定内容
- 还可以使用celery实现简单的分布式爬虫系统等等
Celery 在执行任务时需要通过一个消息中间件(Broker)来接收和发送任务消息,
以及存储任务结果, 一般使用rabbitMQ or Redis,后面会讲
Celery的优点
- 简单:Celery 易于使用和维护,并且它 不需要配置文件 ,并且配置和使用还是比较简单的(后面会讲到配置文件可以有)
- 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
- 快速:单个 Celery 进程每分钟可处理数以百万计的任务,而保持往返延迟在亚毫秒级
- 灵活: Celery 几乎所有部分都可以扩展或单独使用,各个部分可以自定义。
Celery的执行流程及架构
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进程来实现分布式的并行处理任务
标签:异步,队列,介绍,Celery,处理,任务,执行 From: https://www.cnblogs.com/Hqqqq/p/18199220