目录

1.为什么使用Celery?

2. Celery介绍

3. 创建Celery实例并加载配置

4. 定义发送短信任务

5.启动Celery服务

6. 调用发送短信任务


1.为什么使用Celery?

  • 消费者取到消息之后,要消费掉(执行任务),需要我们去实现。
  • 任务可能出现高并发的情况,需要补充多任务的方式执行。
  • 耗时任务很多种,每种耗时任务编写的生产者和消费者代码有重复。
  • 取到的消息什么时候执行,以什么样的方式执行。

结论:

  • 实际开发中,我们可以借助成熟的工具Celery来完成。
  • 有了Celery,我们在使用生产者消费者模式时,只需要关注任务本身,极大的简化了程序员的开发流程。

2. Celery介绍

  • Celery介绍:

    • 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。
    • 单个 Celery 进程每分钟可处理数以百万计的任务。
    • 通过消息进行通信,使用消息队列(broker)客户端消费者之间进行协调。
  • 安装Celery:

    $ pip install -U Celery
    
  • Celery官方文档

3. 创建Celery实例并加载配置

1.定义Celery包(在主业务逻辑包的同级目录下,新建名字为celery_tasks的包)

2.创建Celery实例(在新建的包下面新建py文件main.py)

main.py里面编写创建实例的代码

# celery启动文件
from celery import Celery# 创建celery实例
celery_app = Celery('实例名称')

3.加载Celery配置(新建一个config.py的文件,来编写配置)

config.py里面添加配置的代码

# Celery的配置文件# 指定中间人、消息队列、任务队列、容器,使用redis
broker_url = "redis://192.168.174.129/10"

加载celery的配置(除了实例名称,其他都是固定写法)

# celery启动文件
from celery import Celery# 创建celery实例
celery_app = Celery('实例名称')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')

4. 定义发送短信任务

创建发送短信的任务,(例如创建一个sms的包,任务名为tasks.py(固定的)

4.1.注册任务:在main.py下面编写代码

# celery启动文件
from celery import Celery# 创建celery实例
celery_app = Celery('meiduo')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')
# 自动注册celery任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])

4.2.定义任务:在tasks.py 里面编写定义任务的代码

注:装饰器中的name可以自己定义,最好和本任务有关系.(一般和函数名相对应)

将需要使用的celery的代码,放到编写的函数里面,如果该原来该代码有参数,则还是原样给定义的函数加上参数

from celery_tasks.main import celery_app
# bind:保证task对象会作为第一个参数自动传入
# name:异步任务别名
# retry_backoff:异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s
# max_retries:异常自动重试次数的上限
@celery_app.task(bind=True, name='ccp_send_sms_code', retry_backoff=3)
# 使用装饰器装饰异步任务,保证celery识别任务
@celery_app.task(name='send_sms_code')  # name就是给任务起个别名
def send_sms_code(mobile, sms_code):"""发送短信验证码:param mobile: 手机号:param sms_code: 短信验证码:return: 成功:0   失败:-1"""send_ret = CCP().send_template_sms("*******", "*****", mobile, sms_code)return send_ret

5.启动Celery服务

进入到最初创建的celery_tasks的包的路径下,输入命令启动Celery服务

celery -A celery_tasks.main worker -l info
  • -A指对应的应用程序, 其参数是项目中 Celery实例的位置。
  • worker指这里要启动的worker。
  • -l指日志等级,比如info等级。

运行后可以到,[tasks] 的下面就由我们刚才定义的任务  send_sms_code

6. 调用发送短信任务

使用celery异步发送短信验证码代替原来的代码,导入定义的任务调用delay()函数

from celery_tasks.sms.tasks import send_sms_code# 使用Celery发送验证码
send_sms_code.delay(mobile, sms_code)  # 固定的写法,调用delay

Celery介绍和使用相关推荐

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

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

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

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

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

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

  4. celery介绍、安装和使用

    程序员开发指南Descriptionhttps://guide.996station.com 996技术站 - 活在未来 | KingSun966技术站,极客带你看世界!https://www.996 ...

  5. Celery介绍及常见错误

    celery 情景:用户发起request,并等待response返回.在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件.手机验证码等. 使用 ...

  6. celery 可视化_Django中Celery的实现介绍(一)

    Django中Celery的实现 Celery介绍 Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度. 上图展示的是Celery ...

  7. Django - Celery使用及介绍

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

  8. python Celery 分布式任务队列快速入门

    本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置celery periodic task 一 ...

  9. celery定时任务简单使用

    celery介绍 Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务( async task )和定时任务( cr ...

最新文章

  1. 开源项目PullToRefresh详解(一)——PullToRefreshListView
  2. libgdx学习记录18——Box2d物理引擎
  3. Nginx配置pathinfo
  4. VS2017中删项目属性中连接器删除继承的值
  5. POJ 2054 Color a Tree (贪心)
  6. Mybatis介绍、jdbc操作数据库原始写法以及Mybatis架构
  7. centos7 rpm 安装 rabbitMQ 最新版
  8. noip2017day2
  9. SqlServer中将某列的值拼接成字符串
  10. GIS案例练习-----------第十天
  11. 74HC/LS/HCT/F系列芯片的区别及使用[转]
  12. 高通平台,MSM8937/MSM8953 RF配置流程
  13. 小学认识计算机说课ppt,“认识计算机”说课稿.ppt
  14. DFA(deterministic finite automaton )有限状态机概念
  15. linux集群pbs管理,PBS-Torque集群部署
  16. 网站开发进阶(十一)如何将一个jsp页面嵌套在另一个页面中
  17. 在浏览器输入一句话之后是如何响应的
  18. Matlab App Designer编译打包exe后读取文件路径问题
  19. debian nvidia 安装_在 Debian 上安装 Nvidia 显卡驱动启用 Nvenc
  20. unity中打包APP显示手机最顶端的状态栏

热门文章

  1. python123编写函数求和_Python基础之函数
  2. echarts设置折线图属性
  3. java面试开发过程中用到的问题
  4. Android 中单选框或复选框点击其中一个,其余取消操作
  5. 浅析ios开发中Block块语法的妙用
  6. 轻量级KVO ——》 KVO 管理 observeValueForKeyPath
  7. sqlmap —— os-shell参数分析
  8. Java EE——Mybatis 框架学习
  9. Java虚拟机:Java中堆和栈的详细区别
  10. SSH整合JPA+Mysql