• Django Celery


    Django中使用Celery

    执行命令

    celery -A mycelery.main worker --loglevel=info -P eventlet

    celery相关会放在django根目录下

    说明

    config.py

    broker_url = 'redis://127.0.0.1:6379/1'
    result_backend = 'redis://127.0.0.1:6379/2'
    

    main.py

    # 主程序
    import os
    from celery import Celery
    # 创建celery实例对象
    app = Celery("sms")
    
    # 把celery和django进行组合,识别和加载django的配置文件
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.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
    

    tasks.py

    # celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
    from mycelery.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"
    

    视图调用

    from django.shortcuts import render
    
    # Create your views here.
    
    
    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')
    
  • 相关阅读:
    android EditText 软键盘 一些总结
    Activity的4种加载模式最佳解答及Intent常用标识
    Android App监听软键盘按键的三种方式
    解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)
    Android使用WindowManager实现悬浮窗口
    android 设置软键盘默认为26位软键盘
    android:configChanges属性总结
    空腹吃香蕉对身体好吗?哪些水果不宜空腹吃
    冒泡排序,选择排序,二分法
    Android:内存优化的一些总结
  • 原文地址:https://www.cnblogs.com/tangshuo/p/12744522.html
Copyright © 2020-2023  润新知