celery 入门 笔记

本文介绍了Celery作为异步任务调度工具的使用,包括其官方文档、安装步骤、架构组成(如Celery beat、worker、broker和backend)以及适用场景。Celery使用RabbitMQ作为默认broker,适用于发送邮件、Web应用异步任务和定时任务等场景。文章还提到了Celery的灵活性和高可用性特点。
摘要由CSDN通过智能技术生成

官方文档 

http://docs.celeryproject.org/en/3.1/configuration.html#amqp-backend-settings

rabitmq的安装:http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#id3

廖雪峰 任务调度器celery

python任务调度模块celery https://blog.csdn.net/weixin_39934221/article/details/80468242

 

https://www.jianshu.com/p/42b98f5eacb3

https://blog.csdn.net/u011138533/article/details/76497780

https://www.ibm.com/developerworks/cn/opensource/os-cn-celery-web-service/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral


使用Celery (异步任务的调度工具)

           简单来说,rabbitmq是一个采用Erlang写的强大的消息队列工具。在celery中可以扮演broker的角色。

那么什么是broker?(中文翻译:经纪人,代理人,中间人) 

broker是一个消息传输的中间件,可以理解为一个邮箱(消息队列)。每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,进行对于的程序执行。

Celery 支持 RabbitMQ、Redis 甚至其他数据库系统作为其消息代理中间件。

那么什么又是backend?通常程序发送的消息,发完就完了,可能都不知道对方时候接受了。为此,celery实现了一个backend,用于存储这些消息以及celery执行的一些消息和结果。对于 brokers,官方推荐是rabbitmq和redis,至于backend,就是数据库啦。为了简单起见,我们都用redis。
 

celery的架构图一

 

celery beat: 任务调度器,beat进程会读取配置文件的内容,周期性的将配置中到期需要执行的任务发送给任务队列。
celery worker: 执行任务的消费者,通常会在多台服务器运行多个消费者 来提高执行效率。
broker: 消息代理,或者叫做消息中间件,接受任务生产者发送过来的任务消息,存进队列再按序分发给任务消费方(通常是消息队列或者数据库)
producer: 调用了celery提供的API、函数或者装饰器而产生任务并交给任务队列处理的都是任务生产者。
result backend: 任务处理完后保存状态信息和结果,以供查询。celery默认已支持redis、 rabbitmq、 mongoDB、django ORM等方式

celery的架构图二

任务生产者 (task producer)

任务生产者 (task producer) 负责产生计算任务,交给任务队列去处理。在 Celery 里,一段独立的 Python 代码、一段嵌入在 Django Web 服务里的一段请求处理逻辑,只要是调用了 Celery 提供的 API,产生任务并交给任务队列处理的,我们都可以称之为任务生产者。

任务调度器 (celery beat)

Celery beat 是一个任务调度器,它以独立进程的形式存在。Celery beat 进程会读取配置文件的内容,周期性地将执行任务的请求发送给任务队列。Celery beat 是 Celery 系统自带的任务生产者。系统管理员可以选择关闭或者开启 Celery beat。同时在一个 Celery 系统中,只能存在一个 Celery beat 调度器。

任务代理 (broker)

任务代理方负责接受任务生产者发送过来的任务处理消息,存进队列之后再进行调度,分发给任务消费方 (celery worker)。因为任务处理是基于 message(消息) 的,所以我们一般选择 RabbitMQ、Redis 等消息队列或者数据库作为 Celery 的 message broker。

任务消费方 (celery worker)

Celery worker 就是执行任务的一方,它负责接收任务处理中间方发来的任务处理请求,完成这些任务,并且返回任务处理的结果。Celery worker 对应的就是操作系统中的一个进程。Celery 支持分布式部署和横向扩展,我们可以在多个节点增加 Celery worker 的数量来增加系统的高可用性。在分布式系统中,我们也可以在不同节点上分配执行不同任务的 Celery worker 来达到模块化的目的。

结果保存

Celery 支持任务处理完后将状态信息和结果的保存,以供查询。Celery 内置支持 rpc, Django ORM,Redis,RabbitMQ 等方式来保存任务处理后的状态信息。

celery适用的场景

Celery是一个基于Python开发的分布式异步消息任务队列,它简单、灵活、可靠,是一个专注于实时处理的任务队列,同时也支持任务调度。通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用Celery。举几个适用场景:

1)可以在 Request-Response 循环之外执行的操作(可以异步执行的任务):发送邮件、推送消息。清理/设置缓存等。

2)web应用。当用户触发的一个操作需要较长时间才能执行完成时,可以把它作为任务交给celery去异步执行,执行完成后再返回给用户。耗时的操作:调用第三方 API、视频处理(前端通过 AJAX 展示进度和结果)。

3)定时任务(周期性任务):取代 crontab。

Celery有以下几个优点:

简单:一旦熟悉了Celery的工作流程后,配置和使用是比较简单的。

高可用:当任务执行失败或执行过程中发生连接中断,Celery 会自动尝试重新执行任务。

快速:一个单进程的Celery每分钟可处理上百万个任务。

灵活: Celery的大部分组件都可以被扩展及自定制。

常用的Broker有RabbitMQ、Redis、数据库等,我们这里使用的是RabbitMQ,如下图2-2所示:

 

celery安装

安装celery,提供了bundles方式,也就是安装celery 的同事可以一起安装多种依赖。

pip install "celery[librabbitmq,redis,msgpack]"

安装完成后会在PATH(或virtualenv的bin目录)添加几个命令:celery(主要用这个)、celerybeat、celeryd 和celeryd-multi

Celery的默认broker是RabbitMQ,仅需配置一行就可以:

broker_url = 'amqp://guest:guest@localhost:5672//'

rabbitMQ 没装的话请装一下,安装看这里http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#id3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值