• django中使用celery


    在django根目录下创建一个文件夹,名字随便起

    mycelery
        sms
            __init.py
            task.py
        __init__.py
        config.py
        main.py
    # 以上是目录的基本结构,email和sms是发邮件和短信的任务,会占用大量的时间,我们就需要采用celery来进行异步执行,task.py文件是规定的文件名,不能用其他的
     
    # 配置文件config.py:
    broker_url = 'redis://127.0.0.1:6379/15'
    result_backend = 'redis://127.0.0.1:6379/14'
     
    #任务文件tasks.py:
    # celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
    from mycelerys.main import app
    import time
    import logging
    log = logging.getLogger("django")
    ​
    @app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
    def send_sms(mobile):
        """发送短信"""
        print("向手机号%s发送短信成功!"%mobile)
        time.sleep(5)
        return "send_sms OK"
    ​
    @app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
    def send_sms2(mobile):
        print("向手机号%s发送短信成功!" % mobile)
        time.sleep(5)
        return "send_sms2 OK"
     
    # 最后在main.py主程序中对django的配置文件进行加载
    import os
    from celery import Celery
    # 创建celery实例对象
    app = Celery("sms")
    # 把celery和django进行组合,识别和加载django的配置文件
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryPros.settings.dev')
    # 通过app对象加载配置
    app.config_from_object("mycelery.config")
    # 加载任务
    # 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称
    # app.autodiscover_tasks(["任务1","任务2"])
    app.autodiscover_tasks(["mycelery.sms",])

    # 启动Celery的命令
    # 强烈建议切换目录到mycelery根目录下启动
    # celery -A mycelery.main worker --loglevel=info
     

    最后在django的view视图中调用

    from django.shortcuts import render
    from django.shortcuts import render,HttpResponse
    from mycelerys.sms.tasks import send_sms,send_sms2
    from datetime import timedelta
    from datetime import datetime
    def test(request): ​ ################################# 异步任务 # 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决 send_sms.delay("110") send_sms2.delay("119") # send_sms.delay() 如果调用的任务函数没有参数,则不需要填写任何内容 ​ ​ ################################# 定时任务 ​ ctime = datetime.now() # 默认用utc时间 utc_ctime = datetime.utcfromtimestamp(ctime.timestamp()) time_delay = timedelta(seconds=10) task_time = utc_ctime + time_delay result = send_sms.apply_async(["911", ], eta=task_time) print(result.id) ​ return HttpResponse('ok')

     

  • 相关阅读:
    C# 复制(深拷贝、浅拷贝)
    Nunit-Writing Tests
    Thread.Sleep vs. Task.Delay
    AutoMapper Getting started
    设计:抽象类类还是接口
    C++Primer第五版——习题答案详解(八)
    C++Primer第五版——习题答案详解(七)
    C++Primer第五版——习题答案详解(六)
    C++Primer第五版——习题答案详解(五)
    C/C++中的函数指针的使用与总结
  • 原文地址:https://www.cnblogs.com/tuzaizi/p/13167877.html
Copyright © 2020-2023  润新知