程序员开发指南Descriptionhttps://guide.996station.com

996技术站 - 活在未来 | KingSun966技术站,极客带你看世界!https://www.996station.com

一、 问题抛出

我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果由于各种原因,这封邮件发送所需时间较长,那么客户端将会等待很久,造成不好的用户体验.

那么怎么解决这样的问题呢?

我们将耗时任务放到后台异步执行。不会影响用户其他操作。除了注册功能,例如上传,图形处理等等耗时的任务,都可以按照这种思路来解决。如何实现异步执行任务呢?我们可使用celery. celery除了刚才所涉及到的异步执行任务之外,还可以实现定时处理某些任务。

二、celery介绍

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

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

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

三、celery任务队列

任务队列是一种跨线程、跨机器工作的一种机制.

  任务队列中包含称作任务的工作单元。有专门的工作进程持续不断的监视任务队列,并从中获得新的任务并处理.

  celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的信息派发给worker来处理。

  一个celery系统可以包含很多的worker和broker,可增强横向扩展性和高可用性能。

四、celery安装

我们可以使用python的包管理器pip来安装:

pip install -U Celery

也可从官方直接下载安装包:celery · PyPI

tar xvfz celery-0.0.0.tar.gz
cd celery-0.0.0
python setup.py build
python setup.py install

五、celery使用

使用celery第一件要做的最为重要的事情是需要先创建一个Celery实例,我们一般叫做celery应用,或者更简单直接叫做一个app。app应用是我们使用celery所有功能的入口,比如创建任务,管理任务等,在使用celery的时候,app必须能够被其他的模块导入。

1.创建应用

我们首先创建tasks.py模块, 其内容为:

from celery import Celery# 我们这里案例使用redis作为broker
app = Celery('demo', broker='redis://:332572@127.0.0.1/1')# 创建任务函数
@app.task
def my_task():print("任务函数正在执行....")

  Celery第一个参数是给其设定一个名字, 第二参数我们设定一个中间人broker, 在这里我们使用Redis作为中间人。my_task函数是我们编写的一个任务函数, 通过加上装饰器app.task, 将其注册到broker的队列中。

  现在我们在创建一个worker, 等待处理队列中的任务.打开终端,cd到tasks.py同级目录中,执行命令:

celery -A tasks worker --loglevel=info

显示效果如下:

2.调用任务

  任务加入到broker队列中,以便刚才我们创建的celery workder服务器能够从队列中取出任务并执行。如何将任务函数加入到队列中,可使用delay()。

进入python终端, 执行如下代码:

from tasks import my_task
my_task.delay()

执行效果如下:

  我们通过worker的控制台,可以看到我们的任务被worker处理。调用一个任务函数,将会返回一个AsyncResult对象,这个对象可以用来检查任务的状态或者获得任务的返回值。

3.存储结果

  如果我们想跟踪任务的状态,Celery需要将结果保存到某个地方。有几种保存的方案可选:SQLAlchemy、Django ORM、Memcached、 Redis、RPC (RabbitMQ/AMQP)。

  例子我们仍然使用Redis作为存储结果的方案,任务结果存储配置我们通过Celery的backend参数来设定。我们将tasks模块修改如下:

from celery import Celery# 我们这里案例使用redis作为broker
app = Celery('demo',backend='redis://:332572@127.0.0.1:6379/2',broker='redis://:332572@127.0.0.1:6379/1')# 创建任务函数
@app.task
def my_task(a, b):print("任务函数正在执行....")return a + b

  我们给Celery增加了backend参数,指定redis作为结果存储,并将任务函数修改为两个参数,并且有返回值。

celery介绍、安装和使用相关推荐

  1. Celery介绍和使用

    目录 1.为什么使用Celery? 2. Celery介绍 3. 创建Celery实例并加载配置 4. 定义发送短信任务 5.启动Celery服务 6. 调用发送短信任务 1.为什么使用Celery? ...

  2. Celery介绍——手机短信异步发送

    1.Celery介绍 1.1 celery应⽤举例 Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处 理,如果你的业务场景中需要⽤到异步任务,就 ...

  3. Celery介绍--手机短信异步发送

    1.Celery介绍 1.1 celery应⽤举例 Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处 理,如果你的业务场景中需要⽤到异步任务,就 ...

  4. Celery介绍---手机短信异步发送

    1.Celery介绍 1.1 celery应⽤举例 Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处 理,如果你的业务场景中需要⽤到异步任务,就 ...

  5. 安装vag服务器虚拟机,FusionAccess桌面云组件介绍/安装

    FusionAccess桌面云组件介绍/安装 FusionAccess桌面云组件介绍/安装 文章目录桌面云管理组件接入访问控制层 虚拟桌面管理层 桌面虚拟机核心组件 安装部署 桌面云关联组件AD-活动 ...

  6. HarmonyOS实战[一]——原理概念介绍安装:基础篇

    [本文正在参与"有奖征文|HarmoneyOS征文大赛"活动] 相关文章: HarmonyOS实战[一]--原理概念介绍安装:基础篇 HarmonyOS实战[二]-超级详细的原子化 ...

  7. MySQL介绍-安装-登录

    MySQL介绍-安装-登录 数据库的概念 数据存储方式 计算机数据(Data)的存储一般以硬盘为数据存储空间资源,从而保证计算机内的数据能够持续保存.对于数据的处理,一般会采用数据库相关的技术进行处理 ...

  8. VSFTP介绍安装使用

    ftp 是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层. sftp 是SSH File T ...

  9. Mininet的介绍安装

    Mininet的介绍 Mininet是一个强大的网络仿真平台,通过这个这个平台,我们可以很方便的模拟真实环境中的网络操作与架构.当前SDN/OpenFlow发展的如火如荼,但是在真实网络中又不可以进行 ...

最新文章

  1. android屏幕关闭屏幕,如何在设备进入睡眠模式(屏幕关闭)时显示屏幕android?...
  2. [Java基础]Properties
  3. bnx2: Can't load firmware file bnx2/bnx2-mips-09-6.2.1b.fw
  4. Atitit algo art算法的艺术 attilax 著 va v67.docxAtitit 算法的艺术 attilax 1. 模型 文本 音视频 图像 32. 文本方面的编码算法 3
  5. soapui脚本链接mysql_SOAPUI中文教程---脚本和脚本库
  6. python往npy写入数据_数据存储在*.npy中的方式是什么?
  7. 抢购秒杀处理方案、分析热点数据
  8. SpringBoot统一异常拦截处理
  9. Android程序中重启系统,Android调用系统关机与重启功能
  10. 手动查毒删除病毒文件图
  11. filling the g ap s: multivariate time series imputation by graph neural networks
  12. 二叉树的结构特点及性质
  13. 串口(DB9)连接线的制作方法
  14. docker创建容器相关命令【详细版】
  15. 简易的本地音乐播放器 适用于Java初学者
  16. Win32汇编练习(SMU—循环结构)
  17. 提高亚马逊关键词搜索排名的方法
  18. html中如何制作星空背景,HTML5网页制作200行代码搞定canvas星空背景连线
  19. (一)c语言百题趣味题之--分糖问题
  20. 浅谈H5捕鱼游戏设计

热门文章

  1. 【成员故事】CSDN邹欣: 2021 年计划把 CSDN 做成中国第一的技术问答平台
  2. vue+element 表格中全选与清除选中
  3. 阿里斯托芬的剧本《云》
  4. JVM 内存布局详解,图文并茂,写得太好了
  5. 算法设计与分析——布隆过滤器(Bloom Filter)
  6. 转:认知自我,保持真我
  7. ubuntu/vim/terminal/gedit...快捷键
  8. 使用样式表自定义QT表格交替背景色
  9. aws api gateway 设置WebSocket API集成请求
  10. 百度地图解决自定义图标显示问题