开源web框架django知识总结(十)

开源web框架django知识总结(十)

异步方案Celery

生产者消费者设计模式

思考:

  • 下面两行代码存在什么问题?
CCP().send_template_sms(mobile, [sms_code, 5], 1)

return JsonResponse({
   'code': 0,'errmsg': 'ok'})

问题:

  • 我们的代码是自上而下同步执行的。

  • 借用第三方接口,也受网络延迟等多方面影响。

  • 发送短信是耗时的操作。如果短信被阻塞住,用户响应将会延迟。

  • 响应延迟会造成用户界面的倒计时延迟。
    在这里插入图片描述
    解决:

  • 异步发送短信

  • 发送短信和响应分开执行,将发送短信从主业务中解耦出来。
    在这里插入图片描述

思考:

  • 如何将发送短信从主业务中解耦出来。

生产者消费者设计模式介绍

  • 为了将发送短信从主业务中解耦出来,我们引入生产者消费者设计模式

  • 它是最常用的解耦方式之一,寻找**中间人(broker)**搭桥,保证两个业务没有直接关联
    总结:

  • 生产者生成消息,缓存到消息队列中,消费者读取消息队列中的消息并执行。

  • 由阿尔法商城生成发送短信消息,缓存到消息队列中,消费者读取消息队列中的发送短信消息并执行。

Celery介绍和使用

思考:

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

结论:

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

1. Celery介绍

  • Celery介绍:

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

    pip install -U Celery   # -u 参数是升级安装(原来没有,直接安装;有,升级到最新)
    

    Celery官方文档

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

1.定义Celery_tasks包、创建Celery初始化模块、配置文件
在这里插入图片描述
config.py

# 如果使用 redis 作为中间人
# 需要这样配置:
# 1、将来生产者会把任务发布到redis的10号库
# 2、消费者会从redis的10号库中提取任务并执行
broker_url='redis://192.168.42.128:6379/10'

main.py

"""
该文件作为异步应用程序初始化的模块
"""
# 在异步任务程序中加载django的环境
import os
os.environ.setdefault(
    'DJANGO_SETTINGS_MODULE',
    'aerf_mall.settings.dev'   # 此行aerf_mall要改成你对应的项目名字
)


from celery import Celery

# 初始化一个应用程序对象
app = Celery("aerf")

# 加载配置文件——参数是配置文件(模块)的导包路径
# 我们将来是在celery_tasks包所在的目录为工作目录运行异步程序;
app.config_from_object('celery_tasks.config')

# 告知app监听的任务有哪些
# 该函数的参数是一个列表,列表里写的是任务包的导包路径
app.autodiscover_tasks([
    'celery_tasks.sms',

])

2、将之前修改好的yuntongxun文件夹拷贝过来,修改ccp_sms.py引入包的位置

# from libs.yuntongxun.CCPRestSDK import REST
from .CCPRestSDK import REST

3、新建sms包,新建tasks.py文件

tasks.py

"""
tasks.py文件名是固定,该文件中定义异步任务函数!!
"""
from celery_tasks.main import app
from celery_tasks
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主打Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值