当前位置:网站首页>异步数据-短信验证码
异步数据-短信验证码
2022-07-17 05:03:00 【du fei】
1.Celery简单的使用
pip install celery==4.4.7
pip install eventlet==0.26.1
celery,分布式异步任务队列
eventlet,并发网络库 gevent 协程库
- 创建一个laufing.py文件里面写入代码
#实例化对象
from celery import Celery
# 第一个参数worker name
# broker 代理,消息中间件
# "myworker", broker="redis://:密码(没有密码可以不用写)@localhost:6379/选择库"
app = Celery("myworker", broker="redis://:[email protected]:6379/4")
#也可以app.conf.broker_url = "xxxx"
#创建任务函数
@app.task
def task1():
print("正在执行任务...")
#window
# 端口输入命令
celery -A laufing worker -l info -P eventlet
ipython中模拟发送任务:在laufing.py的同级目录打开一个cmd命令行。
2. Celery存储任务结果
创建一个laufing.py文件,并创建worker
from celery import Celery
app = Celery("worker2", broker="redis://:[email protected]:6379/4", backend="redis://:[email protected]:6379/5")
@app.task
def task1(a, b):
print("简单求和")
return a + b
@app.task
def task2(a, b):
print("2-s后求和")
time.sleep(20)
return a + b
前台启动worker
#window
celery -A laufing worker -l info -P eventlet
发送任务,并获取结果
ipython中测试如下:
from laufing import task1, task2
r1 = task1.delay(3, 5) # 发送任务
r1.result
r2 = task2.delay(4, 7) #发送任务,并立即执行下一行,不会阻塞
r2.result # worker来执行task,返回结果后才可以拿到
2. celery异步发送短信
- 在django项目中的主应用里,创建config.py文件里面写入代码
broker_url = 'redis://:@127.0.0.1:6379/2'
result_backend = 'redis://:@127.0.0.1:6379/3'
- 主应用下在创建一个celery.py文件写入代码
from celery import Celery
from django.conf import settings
import os
# 设置环境变量
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'num5.settings')
# 实例化celery对象
app = Celery('cc')
# 通过配置文件,进行配置
app.config_from_object('num5.config')
# 让app自动发现任务函数
app.autodiscover_tasks(settings.INSTALLED_APPS)
- 在子应用中创建一个tasks.py文件封装函数
from num5.celery import app
from ronglian_sms_sdk import SmsSDK
import json
accId = '8aaf07088185853e01818a78d71c0195' # 主账户ID
accToken = '982f2e6dd6a54e6f83d014bc22ac7206' # 账户授权令牌
appId = '8aaf07088185853e01818a78d80e019c' # 默认
# Create your tests here.
# 定义发送短信的函数
@app.task
def sms_message(sms_code, mobile, expire=5):
""" :param sms_code: 要发送的验证码 :param mobile: 发送的手机号 :param expire: 过期时间 :return: """
# 实例化sdk对象
sdk = SmsSDK(accId=accId, accToken=accToken, appId=appId)
# 准备数据
tid = '1'
datas = ("%s" % sms_code, "%s" % expire)
# 发送短信
res = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
# 解析json字符串
data = json.loads(res)
print('容联云响应的数据:', data)
# if data.get('statusCode') == '000000':
# return True
#
# return False
return data
- 去views中写入类视图
from users.tasks import sms_message
import random, re
# 验证码
class SmsCodeAPIView(APIView):
# 发送短信验证码
def get(self, request):
mobile = request.query_params.get('mobile')
sms_code = random.randint(1000, 9999)
# 判断手机号
ser = re.findall(r'^1[3-9][0-9]{9}$', mobile)
if not ser:
return Response({
'code': 400, 'msg': '请输入正确的手机号'})
# 发送短信
sms_message.delay(sms_code, mobile)
# 这里不用等待发送的短信可以直接执行下一条命令
r = redis.Redis(host='127.0.0.1', port=6379)
r.set(mobile, sms_code, ex=(60 * 60 * 2))
return Response({
'code': 200, 'msg': '已发送请注意查收'})
- 运行终端,在新建一个终端运行一下命令
celery -A num5 worker -l info -P eventlet

边栏推荐
- Sleuth getting started
- CVE-2022-23131 Zabbix SAML SSO认证绕过漏洞
- String string special interception processing according to symbols
- 【FPGA教程案例26】在FPGA中通过verilog来实现小数的基础运算
- 浅聊全局过滤器
- Pingcap clinic data acquisition instructions
- UE plug-in electronicnodes 5.0.0/4.23-4.27
- 高等数学笔记:伍月习题选集
- Chat about global filter
- Tidb performance analysis and optimization
猜你喜欢

一文了解定时任务

Blessing for the elderly popular short video wechat applet source code download support traffic master

Introduction to redis

数据库取配置文件字段,然后进行数据处理和判断
![[FPGA tutorial case 26] realize the basic operation of decimals through Verilog in FPGA](/img/94/a123d212ccde207395d72e9563012c.png)
[FPGA tutorial case 26] realize the basic operation of decimals through Verilog in FPGA

畢設:基於Vue+Socket+Redis的分布式高並發防疫健康管理系統

Load balancer ribbon practice

OLTP Load Performance Optimization Practice

Simple UI funny text conversion Emoji expression wechat applet supports sentence word conversion_ Source code

DSL查询文档
随机推荐
And predicts that nerf will eventually replace deepfake
接口的参数返回封装类Result
负载均衡器ribbon实战
微众对接机制备忘
银行联行号cnasp&查询(二)
根据日期重新排列数据js
Mysql database table a data synchronization to table b
Construction and application of knowledge atlas de (V): knowledge reasoning
redis 安装
【FPGA教程案例26】在FPGA中通过verilog来实现小数的基础运算
一文了解定时任务
三种高并发方式实现i++
String string special interception processing according to symbols
PingCAP Clinic 数据采集说明
Mysql8.026-- view (bottom)
Construction and application of knowledge map de (VII): large scale knowledge map pre training
Exploration: pharmaceutical factory system network clock synchronization (NTP time synchronization server)
RestAPI
浅聊链路追踪
sleuth入门