Celery异步发送短信

本文介绍了如何使用Celery进行分布式异步任务管理,如发送短信,配置细节及在Django项目中的应用。通过实例演示了如何配置Celery、定义任务函数和在视图中调用,同时提供了启动Celery worker的步骤。
摘要由CSDN通过智能技术生成

1.Celery

安装celery
celery,分布式异步任务队列 pip install celery==4.4.7

eventlet,并发网络库 gevent 协程库pip install eventlet==0.26.1

Celery是一个基于python的分布式异步任务队列,服务器提交任务,celery处理,服务器给客户端发送已处理响应,不影响后面的程序运行

  • 异步任务,比如发送短信,消息推送、音频处理
  • 做定时任务
  • 可以使用celery实现简单分布式爬虫系统
1.1 Celery分析

在这里插入图片描述

  1. Task --任务
  2. Borker --消息中间件,来接收任务和发送任务信息,保存任务队列
  3. Worker–后台执行任务,监视队列中是否有任务,有就立刻执行
  4. Backend–保存任务执行结果

2.异步发送短信

2.1 配置celery

在与项目名下的文件创建celery.py文件

from celery import Celery
from django.conf import settings
import os

# 配置环境变量
os.environ.setdefault("DJANGO_SETTINGS_MODULE",'p6.settings')

# 实例化celery对象
app = Celery("cc")
# 通过配置文件 进行配置
app.config_from_object("p6.config")

# 让app自动发现任务函数
app.autodiscover_tasks(settings.INSTALLED_APPS)

在该文件下创建config.py文件存储celery信息

broker_url = "redis://:123123@127.0.0.1:6379/5"
result_backend = "redis://:123123@127.0.0.1:6379/6"
2.2 任务

在子应用文件下创建tasks.py

from p6.celery import app
from ronglian_sms_sdk import SmsSDK
import json



accId = "8aaf07088185853e01818a75a87a016f"
accToken = "6b755e025dc2436a8e3b7b82ef9ac20c"
appId = "8aaf07088185853e01818a75a9a00176"

# 定义发送短信的函数
# 定义任务函数
@app.task
def send_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)
    return data
2.3 视图提交任务
# 短信验证码视图
import redis
from .tasks import send_message
class SmsCodeAPIView(APIView):
    # 发送短信验证码
    def get(self,request):
        # 1.获取前端手机号
        mobile = request.query_params.get("mobile")
        # 生成随机码
        sms_code = str(random.randint(10000,99999))
        send_message.delay(sms_code,mobile) # 异步发送短信验证码
        r = redis.Redis(host='127.0.0.1', port=6379, password='123123')
        key = "sms_%s" % mobile
        r.set(key, sms_code, ex=300)

        return Response({"code": 200, "msg": '短信已发送,请注意查收'})

2.4 启动celery

开两个终端,一个启动celery,一个启动django

celery -A p6 worker -l info -P eventlet
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值