美文网首页
django使用celery异步发送短信

django使用celery异步发送短信

作者: 是小懒呀 | 来源:发表于2020-01-07 21:01 被阅读0次
    1. 安装celery模块
    pip install -U celery==4.3.0
    
    2. 创建celery相关目录
    xiaolan/  # 项目主目录
    ├── mycelery/
        ├── config.py     # 配置文件
        ├── __init__.py   
        ├── main.py       # 主程序
        └── sms/          # 一个目录可以放置多个任务,该目录下存放当前任务执行时需要的模块或依赖
            └── tasks.py  # 任务的文件,名称必须是这个
    
    3. 创建celery配置文件config.py
    # 注意: 我的redis因为没有设置密码所有可以这样用
    # 任务队列的链接地址
    broker_url = 'redis://127.0.0.1:6379/15'
    # 结果队列的链接地址
    result_backend = 'redis://127.0.0.1:6379/14'
    
    4. 在man.py主程序中对django的配置文件进行加载, 把django和celery进行组合
    import os
    import django
    from celery import Celery
    
    
    # 主程序
    # 创建celery实例对象
    app = Celery("xiaolan")
    
    
    # 把celery和django进行结合, 识别和加载django的配置文件
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xiaolan.settings.dev')
    
    # 对django框架进行初始化
    django.setup()
    
    # 通过app对象加载配置
    app.config_from_object("mycelery.config")
    
    # 加载任务
    # 参数必须是一个列表, 里面的每一个都是任务的路径名称
    # 列: app.autodiscover_tasks(["任务1", "任务2"])
    app.autodiscover_tasks(["mycelery.sms"])
    
    # 启动Celery的命令
    # 强烈建议切换目录到mycelery目录下启动
    # celery -A main worker --loglevel=info
    
    5. 配置tasks.py, 把注册短信发送功能, 整合成一个任务函数,代码:
    from mycelery.main import app
    from .yuntongxun.sms import CCP
    from xiaolan.settings import constants
    import logging
    from django.conf import settings
    log = logging.getLogger("django")
    
    
    @app.task(name="send_sms")
    def send_sms(mobile, sms_code):
        """异步发送短信"""
        ccp = CCP()
        try:
            result = ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRE//60 ], settings.SMS.get("_templateID"))
            return result
        except:
            log.error("发送短信验证码失败!手机号:%s" % mobile)
    
    6. 把django中的短信发送模块和相关常量配置文件直接移动到当前sms任务目录中
    mycelery/
    ├── config.py
    ├── __init__.py
    ├── main.py
    └── sms/
        ├── __init__.py
        ├── tasks.py
        └── yuntongxun
            ├── CCPRestSDK.py
            ├── __init__.py
            ├── sms.py
            └── xmltojson.py
    
    7. 在django里面, 我们调用celery来异步执行任务, 需要完成2个步骤:
    # 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决
    from mycelery.sms.tasks import send_sms
    
    # 2. 调用任务函数,发布任务
    send_sms.delay(mobile,sms_code)
    # send_sms.delay() 如果调用的任务函数没有参数,则不需要填写任何内容
    
    8. 启动项目
    celery -A mycelery.main worker --loglevel=info
    

    相关文章

      网友评论

          本文标题:django使用celery异步发送短信

          本文链接:https://www.haomeiwen.com/subject/bnpdactx.html