Django异步方案celery(实现短信发送)

python编程快速上手(持续更新中…)

python实战项目(Django技术点)


1、消息队列接收与使用

A/短信异步发送

B/Cenlery框架-生产者-消费者模式
在这里插入图片描述
C/需求分析
在这里插入图片描述

2、Celery

Celery官方文档

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

B/安装Celery:

pip install -U Celery

C/创建Celery实例并加载配置
在这里插入图片描述
1.apps下新建Celery包:celery_tasks

2.创建Celery实例:main.py

# 0. 为celery的运行 设置Django的环境
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings')

# 1. 创建celery实例
from celery import Celery
# 参数1: main 设置脚本路径就可以了。 脚本路径是唯一的
app=Celery('celery_tasks')

3、加载Celery配置:celery_tasks.config.py

broker_url = “redis://127.0.0.1/15”

4、celery_tasks.main.py 追加

celery_app.config_from_object(‘celery_tasks.config’)

3. 定义发送短信任务

1、celery_tasks下新建包sms包

2、定义任务:celery_tasks.sms.tasks.py

# 生产者 -- 任务,函数
# 1. 这个函数 必须要让celery的实例的 task装饰器 装饰
# 2. 需要celery 自动检测指定包的任务

from libs.yuntongxun.sms import CCP
from celery_tasks.main import app

@app.task
def celery_send_sms_code(mobie,code):

    CCP().send_template_sms(mobie,[code,5],1)

3、celery_tasks.main.py 追加

#3.需要celery 自动检测指定包的任务
#autodiscover_tasks 参数是列表
#列表中的元素是 tasks的路径

app.autodiscover_tasks([‘celery_tasks.sms’,‘celery_tasks.email’])

4.启动Celery服务:celery -A celery_tasks.main worker -l INFO

运行前端:python -m http.server 8080

cd ~/meiduo_project/meiduo_mall
celery -A celery_tasks.main worker -l info

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

出现下面页面,启动成功
在这里插入图片描述
补充celery worker的工作模式

默认是进程池方式,进程数以当前机器的CPU核数为参考,每个CPU开四个进程。
如何自己指定进程数: celery worker -A proj --concurrency=4
如何改变进程池方式为协程方式: celery worker -A proj --concurrency=1000 -P eventlet -c 1000

# 安装eventlet模块
$ pip install eventlet
# 启用 Eventlet 池
$ celery -A celery_tasks.main worker -l info -P eventlet -c 1000

5. 调用发送短信任务

#发送短信验证码# CCP().send_template_sms(mobile,[sms_code, 5], 1)# Celery异步发送短信验证码
send_sms_code.delay(mobile, sms_code)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值