python中使用Celery容联云异步发送验证码功能

目录
  • 1.celery异步消息队列介绍
    • celery应用举例
    • Celery有以下优点
    • Celery 特性
  • 2.工作原理 *****
    • Celery 扮演生产者和消费者的角色
    • 思维导图
  • 3.异步发短信
    • 3.1.settings同级目录下创建 celery 文件
    • 3.2.redis及容联云配置
    • 3.3.配置settings文件
    • 3.4.配置 settings同级目录下 init 文件
    • 3.5.在utils下新建一个task.py文件
    • 3.6.接口中调用
    • 3.7.先启动django项目

1.celery异步消息队列介绍

celery应用举例

  • Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用celery
  • 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情
  • Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis

Celery有以下优点

  • 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的
  • 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
  • 快速:一个单进程的celery每分钟可处理上百万个任务
  • 灵活: 几乎celery的各个组件都可以被扩展及自定制

Celery 特性

  • 方便查看定时任务的执行情况, 如 是否成功, 当前状态, 执行任务花费的时间等.
  • 可选 多进程, Eventlet 和 Gevent 三种模型并发执行.
  • Celery 是语言无关的.它提供了python 等常见语言的接口支持.

2.工作原理 *****

Celery 扮演生产者和消费者的角色

  • Celery Beat : 任务调度器. Beat 进程会读取配置文件的内容, 周期性的将配置中到期需要执行的任务发送给任务队列.
  • Celery Worker : 执行任务的消费者, 通常会在多台服务器运行多个消费者, 提高运行效率.
  • Broker : 消息代理, 队列本身. 也称为消息中间件. 接受任务生产者发送过来的任务消息, 存进队列再按序分发给任务消费方(通常是消息队列或者数据库).
  • Producer : 任务生产者. 调用 Celery API , 函数或者装饰器, 而产生任务并交给任务队列处理的都是任务生产者.
  • Result Backend : 任务处理完成之后保存状态信息和结果, 以供查询.

思维导图

3.异步发短信

首先得安装俩个表要包

pip install celery
pip install celery-with-redis

3.1.settings同级目录下创建 celery 文件

如果 'namespace=‘CELERY''出现报错 celery可以适当降一下级别 ‘4.4.7'

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'md.settings')

# 注册Celery的APP
app = Celery('meiduo')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现各个app下的tasks.py文件
# app.autodiscover_tasks()

3.2.redis及容联云配置

#获取redis连接
def getRedis():
    from django_redis import get_redis_connection
    conn = get_redis_connection()
    return conn

#发短信  去容联云官网查找自己的信息
from ronglian_sms_sdk import SmsSDK

accId = 'ACCOUNT SID(主账号ID)'
accToken = 'AUTH TOKEN(账户授权令牌)'
appId = 'AppID(默认)'

import json
def send_message(mobile,code,time):
    sdk = SmsSDK(accId, accToken, appId)
    tid = '1'
    datas = (code, time)
    resp = sdk.sendMessage(tid, mobile, datas)
    result = json.loads(resp)
    if result['statusCode'] == '000000':
        return 1
    return 2

3.3.配置settings文件

CELERY_BROKER_URL = 'redis://127.0.0.1:6379/'

CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/'

CELERY_RESULT_SERIALIZER = 'json'

3.4.配置 settings同级目录下 init 文件

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

3.5.在utils下新建一个task.py文件

# 写异步任务的地方
from celery.task import task
from .comm import send_message

# 定义发送手机号的方法
@task
def mail(mobile,code,time):
    send_message(mobile,code,time)    

3.6.接口中调用

如果用了redis数据库,得先开启数据库

from utils.task import send_message
from utils.comm import getRedis
import random

class SendMes(APIView):
    # 短信验证
    def get(self,request):
        # 接收客户端发送的数据
        imagecode = request.query_params.get('imagecode')
        print(imagecode)
        mobile = request.query_params.get('mobile')
        print(mobile)
        uuid = request.query_params.get('uuid')
        print(uuid)
        if not all([imagecode,mobile]):
            return Response({'msg':'没有获取到'})
        # 验证图片验证码
        conn =getRedis()
        # redis 中取验证码
        code = conn.get(uuid)
        print(code)
        if code:
            code = str(code,encoding='utf8')
            # 图片验证码对比
            if imagecode.lower() == code.lower():
                # 验证通过后调用发送短信接口
                sms_code = random.randint(10000,99999)
                # 引用comm文件中的send_message
                result = send_message(mobile,sms_code,1)
               # 加入短信吗发送成功
                if result:
                    # redis中要存短信验证吗
                    conn.setex(mobile,60,sms_code)
                    # 把图片验证码从redis中删除
                    conn.delete(uuid)
                    return Response({'msg':sms_code})
                else:
                    return ({'msg':'发送失败'})
            else:
                return Response({'msg':'验证码不正确'})
        return Response('ok')

3.7.先启动django项目

然后另开终端 cd到项目 目录下启动celery 服务

指定并发数 --autoscale(最多,最少)

celery worker -A 项目的文件名 --loglevel=info --pool=solo --autoscale=50,5
urn Response('ok')
~~~

#### 3.7.先启动django项目 然后另开终端 cd到项目 目录下启动celery 服务

指定并发数 --autoscale(最多,最少)

```pyhon
celery worker -A 项目的文件名 --loglevel=info --pool=solo --autoscale=50,5

到此这篇关于使用Celery 容联云 异步发送验证码的文章就介绍到这了,更多相关Celery异步发送验证码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在RedHat系Linux上部署Python的Celery框架的教程

    Celery (芹菜)是基于Python开发的分布式任务队列.它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度. 架构设计 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 1. 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成.包括,RabbitMQ, Redis, MongoDB (experimental), Amazon

  • Python并行分布式框架Celery详解

    Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分布式决定了可以有多个 worker 的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农. 在 Python 中定义 Celery 的时候,我们要引入 Broker,中文翻译过来就是"中间人"的意思,在这里 Broker 起到一个中间人的角色.在工头提

  • Python Celery多队列配置代码实例

    这篇文章主要介绍了Python Celery多队列配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Celery官方文档 项目结构 /proj -__init__ -app.py #实例化celery对象 -celeryconfig.py #celery的配置文件 -tasks.py #celery编写任务文件 app.py #coding:utf-8 from __future__ import absolute_import fr

  • python基于celery实现异步任务周期任务定时任务

    这篇文章主要介绍了python基于celery实现异步任务周期任务定时任务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 hello, 小伙伴们, 好久不更新了,这一次带来的是celery在python中的应用以及设置异步任务周期任务和定时任务的步骤,希望能给入坑的你带来些许帮助. 首先是对celery的介绍,Celery其实是一个专注于实时处理和调度任务的分布式任务队列,同时提供操作和维护分布式系统所需要的全部数据, 因此可以用它提供的接口快

  • python Celery定时任务的示例

    本文介绍了python Celery定时任务的示例,分享给大家,具体如下: 配置 启用Celery的定时任务需要设置CELERYBEAT_SCHEDULE . Celery的定时任务都由celery beat来进行调度.celery beat默认按照settings.py之中的时区时间来调度定时任务. 创建定时任务 一种创建定时任务的方式是配置CELERYBEAT_SCHEDULE: #每30秒调用task.add from datetime import timedelta CELERYBEA

  • Python环境下安装使用异步任务队列包Celery的基础教程

    1.简介 celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列.它侧重于实时操作,但对调度支持也很好. celery用于生产系统每天处理数以百万计的任务. celery是用Python编写的,但该协议可以在任何语言实现.它也可以与其他语言通过webhooks实现. 建议的消息代理RabbitMQ的,但提供有限支持Redis, Beanstalk, MongoDB, CouchDB, ,和数据库(使用SQLAlchemy的或Django的 ORM) . celery是易于集成Dja

  • python中使用Celery容联云异步发送验证码功能

    目录 1.celery异步消息队列介绍 celery应用举例 Celery有以下优点 Celery 特性 2.工作原理 ***** Celery 扮演生产者和消费者的角色 思维导图 3.异步发短信 3.1.settings同级目录下创建 celery 文件 3.2.redis及容联云配置 3.3.配置settings文件 3.4.配置 settings同级目录下 init 文件 3.5.在utils下新建一个task.py文件 3.6.接口中调用 3.7.先启动django项目 1.celery

  • php异步:在php中使用fsockopen curl实现类似异步处理的功能方法

    PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之一. 在PHP中我们有的时候其实希望在执行某项操作的时候,同时去执行另外一项操作,举一个场景:在用户抢票的时候,你并不希望用户排队去连接数据库进行查询.判断.插入,完成之后再返回用户结果.其实我们并不需要用户等那么久的时间,用户提交之后,直接告诉他已经抢票成功了就可以了,至于各种操作,交给后台去处理

  • vue中手机号,邮箱正则验证以及60s发送验证码的实例

    今天写了一个简单的验证,本来前面用的组件,但是感觉写的组件在此项目不是很好用,由于用到的地方比较少,所以直接写在了页面中. <div> <p class="fl"> <input name="phone" type="number" placeholder="手机号" v-model="phone"/> <button type="button"

  • Django中使用Celery的方法示例

    起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 pip install django-celery 这个命令使用的依赖是 Celery 3.x 的版本,所以会把我之前安装的 4.x 卸载,不过对功能上并没有什么影响.我们也完全可以仅用Celery在django中使用,但使用 django-celery 模块能更好的管理 celery. 使用 可以把有关 C

  • python中wordcloud安装的方法小结

    正确安装python中的wordcloud(词云库) 第一步: 这里的√一定要勾选上. 第二步:(检查是否有python的环境变量) 那么python就会自动添加环境变量. 第三步:(安装wordcloud) 使用命令:pip install wordcloud 安装不顺利,下载失败!!! 使用命令:pip install wordcloud -iSimple Index****”(从清华镜像站试一试) 还是失败??? 换另一种命令: C:UsersAdministratorAppDataLoc

  • Python中装饰器的基本功能理解

    目录 前言 什么是装饰器 Python 函数的基本特性 函数名的本质: 将函数作为变量使用: 进一步实现装饰器 使用Python装饰器语句: 总结 前言 在 python 中,装饰器由于是 python 语言自带的一个功能,因此,对于其实现以及其用法就会感到比较奇怪,这里我记录一下对它的理解,加深自己的印象. 什么是装饰器 对于什么是装饰器,我们其实应该知道为什么会存在装饰器. ​ 装饰器是 python 引入的一个非常有意思的功能,它主要用于解决想要在原有函数或类的基础上进行功能扩展,但又不会

  • Django中使用celery完成异步任务的示例代码

    本文主要介绍如何在django中用celery完成异步任务,web项目中为了提高用户体验可以对一些耗时操作放到异步队列中去执行,例如激活邮件,后台计算操作等等 当前项目环境为: django==1.11.8 celery==3.1.25 redis==2.10.6 pip==9.0.1 python3==3.5.2 django-celery==3.1.17 一,创建Django项目及celery配置 1,创建Django项目 1>打开终端输入:django-admin startproject

  • Python中celery的使用

    目录 Celery简介 celery的异步任务 1.安装celery 2.安装redis 3.使用ceelry Django中使用celery 1.创建celery文件 2.添加celery配置 3.在别的应用下使用celery执行异步任务 [使用celery异步发送钉钉群消息通知] 4.启动celery服务 Celery简介 Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度. Celery的架构由三部分组成,消息中间件(messa

  • Django中如何使用celery异步发送短信验证码详解

    目录 1.celery介绍 1.1 celery应用举例 1.2 Celery有以下优点 1.3 Celery 特性 2.工作原理 2.1 Celery 扮演生产者和消费者的角色 3.异步发短信 总结 1.celery介绍 1.1 celery应用举例 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用celery 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着

  • python中celery的基本使用详情

    目录 1.基本介绍 2.使用场景 3.工作流程和组成部分 4.Celery执行异步任务 4.1 基础使用 1.基本介绍 Celery 是由Python 编写的简单,灵活,可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具.Celery 专注于实时任务处理,支持任务调度. 简单的说,它就是一个分布式队列的管理工具,用celery提供的接口快速实现并管理一个分布式的任务队列. 有一点我们需要搞清楚,Celery 本身并不是任务队列,它是一个分布式队列的管理工具,Celery

随机推荐