zoukankan      html  css  js  c++  java
  • celery 组件在django环境应用

    第一步安装

    pip install celery==4.4
    

    第二步 配置环境

    # ############################# celery 配置连接redis #############################
    #添加密码的
    CELERY_BROKER_URL = 'redis://:foobared@127.0.0.1:6379/0'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_RESULT_BACKEND = 'redis://:foobared@127.0.0.1:6379/0'
    CELERY_TASK_SERIALIZER = 'json'
    

    第三步   【项目/项目/celery.py】在项目同名目录创建 celery.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # 拒绝隐式引入,因为celery.py的名字和celery的包名冲突,需要使用这条语句让程序正确运行
    from __future__ import absolute_import
    import os
    from celery import Celery
    
    # set the default Django settings module for the 'celery' program.
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'auction.settings')
    
    app =Celery('auction')
    
    # Using a string here means the worker doesn't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    #   should have a `CELERY_` prefix.
    app.config_from_object('django.conf:settings',namespace='CELERY')
    
    # Load task modules from all registered Django app configs.
    # 去每个已注册app中读取 tasks.py 文件
    app.autodiscover_tasks()
    

     第四步【项目/app名称/tasks.py】 

    from celery import shared_task
    
    @shared_task
    def add(x, y):
        return x + y
    
    @shared_task
    def mul(x, y):
        return x * y
    

    第五步 【项目/项目/__init__.py 

    from .celery import app as celery_app
    
    __all__ = ('celery_app',)
    

    第六步 启动worker

    进入项目目录
    
    celery worker -A s -l info -P eventle
    

     第七步 编写视图函数,调用celery去创建任务

    from django.shortcuts import HttpResponse
    from api.tasks import x1
    
    def create_task(request):
        print('请求来了')
        result = x1.delay(2,2)
        print('执行完毕')
        return HttpResponse(result.id)
    
    
    def get_result(request):
        nid = request.GET.get('nid')
        from celery.result import AsyncResult
        # from demos.celery import app
        from demos import celery_app
        result_object = AsyncResult(id=nid, app=celery_app)
        # print(result_object.status)
        data = result_object.get()
        return HttpResponse(data)
    

      第八步 启动django程序

    http://127.0.0.1:8000/api/get/task/?nid=68d4c97e-92e5-42e4-a04d-c1a8f35fb4a
    http://127.0.0.1:8000/api/create/task/
    

      注意事项:

    本地时间和URF实际转换:

    Python3 : 
        # 本地时间转换成utc时间
        utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp())
        target_time = utc_ctime + datetime.timedelta(seconds=10)
        result = x1.apply_async(args=[11, 3], eta=target_time)
        
    python2 :
        
        # “”“本地时间转UTC时间(-8:00)”“”
         time_struct = time.mktime(ctime.timetuple())
         utc_st = datetime.datetime.utcfromtimestamp(time_struct)
    
    
    
         # utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp())
         target_time = utc_st + datetime.timedelta(seconds=30)
    

      

     

      

  • 相关阅读:
    计算中文或全角字符串的长度
    day25 python学习 继承,钻石继承 多态
    day25 python学习 继承,钻石继承
    day24 python学习 类 画元,命名空间作用域,组合,人狗大战升级
    第四周经典问题收集
    day23 python学习 类 人狗大战
    day20 python sys os time json pickl 正则
    python 常见的内置函数
    encode decode enumerate
    3.易错点和新要掌握的内容
  • 原文地址:https://www.cnblogs.com/pushuiyu/p/14010219.html
Copyright © 2011-2022 走看看