Celery任务队列

为什么要使用Celery

  • 我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果因为各种原因,这封邮件发送所需要时间较长,那么客户将会等待很久,造成不好的用户体验
    在这里插入图片描述
解决方法如下
  • 我们将耗时任务放到后台异步执行。这就不会影响用户的取他操作。
  • 如何实现异步执行任务呢?我们可以使用celery.celery除了刚涉及到的异步执行任务之外,还可以实现定时处理某些任务。
    在这里插入图片描述

Celery介绍

  • celery时一个功能完备即插即用的任务队列
  • 它使得我们不需要考虑复杂的问题,使用非常简单。
  • celery看起来似乎很庞大,现在先对其进行简单的了解,然后再去学习其他一些高级的特性。
  • celery使用异步处理问题,当发送邮件或者文件上传或图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验。

Celery的特点

  • 简单:易于使用和维护,有丰富的文档
  • 高效:单个celery进程每分钟可以处理百万个任务
  • 灵活:celery中几乎每个部分都可以自定义扩展

Celery非常易于集成到一些web开发框架中

  • 任务队列时一种跨线程、跨机器工作的一种机制
  • 任务队列中包含称作任务的工作单元。有专门的工作进程持续不断的监视任务队列,并从中获得新的任务并处理。
  • celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者)。clients发出消息到队列中,broker将队列中的信息派发给worker来处理。
  • 一个celery系统可以包含很多的worker和broker,可增强横向护展性和高可用性。
    在这里插入图片描述

Celery核心概念

在这里插入图片描述

  • 作为中间人有两种方案可选择:RabbitMQ、Redis。
  • 下面我们介绍使用Redis
    在这里插入图片描述
安装Celery
# 最好是安装到你项目所使用的虚拟环境下
pip install celery

先来配置任务的发出者(client)和中间人(redis服务器)

创建celery()对象:
  • 创建一个包目录和在这个包目录中创建一个文件:这些名字时不固定的
  • 启动redis服务器,使用它作为中间人
  • Celery()中的第一个参数是所在包的名字.py文件的名字,也可以换成别的,不过一般都是写导包的路径;第二个参数是指定中间人,8代表所使用的数据库的编号:将前面写好的发送邮件的代码复制过来,并进行修改:
  • 使用@app.task进行装饰,装饰以后,它就有一个delay()方法了,这个方法可以将任务放入任务队列,进行异步执行

在这里插入图片描述

使用delay()方法

在这里插入图片描述

任务的处理者

  • 现在有任务的发出者(也就是上面红色线框的代码),也有中间人(redis服务器),还差任务的处理者,这三者是缺一不可的;
  • 任务的发出者,中间人,人物的处理者可以在同一台电脑上启动,也可以不在同一台电脑上;
  • 处理者这一段是需要有任务的代码。
现在我们使用两台电脑
  • 打开Linux电脑,将现在写好的项目源文件,上传到Linux系统中:
  • 因为我们要在ubuntu中进行任务的处理工作;所以,ubuntu中必须要有运行项目所需要的环境
  • 先把windows项目中安装的各种包进行打包
    在这里插入图片描述
    在这里插入图片描述
通过软件(FileZilla Client)把项目传到Ubuntu系统中

在这里插入图片描述

安装项目运行所需要的包
  • cd到文件rr.txt所在的目录
  • 在输入命令
pip install-r rr.txt

在这里插入图片描述
在这里插入图片描述

下面还需要配置一个东西
  • 在启动项目的时候应该初始化settings中相关的配置信息

  • 在windows下启动项目的时候Django已经给我们做了初始化
    在这里插入图片描述

  • 但是处理者(worker)在处理的时候()ubuntu需要用到settings文件中的配置;但是,我们在启动处理者的时候并没有初始化django的settings相关的配置信息。

  • 下面来配置ubuntu中项目的初始化(注意:这些代码在启动任务的处理者电脑上才需要,而任务的发出者也就是在启动Django项目的时候是不需要的。)
    在这里插入图片描述

设置成功以后下面就是启动任务处理者

启动任务处理者命令如下:
celery -A celery_tasks.tasks worker -l info
  • -A 后面跟着的是我们创建包里面的py文件
  • -l 表示信息展示的是info级别,也就是日志的信息级别,也就是输出任务的相关信息
发送邮件成功是这样的

在这里插入图片描述

celery使用流程小结

在这里插入图片描述

  • 如果任务的发出者,中间人还有任务的处理者,不再同一台电脑上的话,这三者之间必须要能进行通信,也就是说需要在同一个网段,而且处理者所在的电脑必须要能上网,否则它也给163的邮箱发不出去。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值