zoukankan      html  css  js  c++  java
  • django---celery异步配置以及定时任务

    装包:

    pip install celery  #安装celery
    pip install eventlet #安装eventlet 协程
    

     

    代码结构图:

    django项目同名文件夹下创建celery.py 文件,app下创建tasks.py 文件

    配置文件:settings  ----  __init__.py  ----  celery.py   ----  tasks.py (文件位置可参考上图) 

    --settings.py--
    #celery任务配置
    UPLOAD_ROOT=os.path.join(BASE_DIR,'static/upload')
    CELERY_BROKER_URL='redis://127.0.0.1:6379/'
    CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/'
    CELERY_RESULT_SERIALIZER='json'
    settings
    --__init__.py--
    #加入绝对引入这个新特性---absolute_import
    #将模块中显式出现的所有字符串转为unicode类型----unicode_literals
    
    from __future__  import absolute_import,unicode_literals
    from .celery import app as celery_app
    
    
    __all__=['celery_app']
    ----celery.py----
    
    
    from __future__  import absolute_import,unicode_literals
    from celery import Celery
    import os
    
    #设置环境变量----对应自己的项目名(Celery_ttoia)
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','Celery_ttoia.settings')
    
    #注册celery
    app=Celery('Celery_ttoia')
    
    #绑定配置文件
    app.config_from_object('django.conf:settings',namespace="CELERY")
    
    #自动发现各个app下的tasks.py文件
    app.autodiscover_tasks()
    ----tasks.py----
    
    
    from celery.task import task
    
    
    #自定义异步任务
    @task
    def aync_test():
        print('异步任务')
        return '123'
    ----views.py----
    
    #调用
    from rest_framework.views import APIView
    from rest_framework.response import Response
    
    from app import tasks  #导包
    
    
    # Create your views here.
    class Dog(APIView):
        def post(self,request):
    
            res=tasks.aync_test.delay() #调用,delay
    
            print(res.id)
            print(666)
            return Response({'code':200,'msg':'666'})

    启动celery异步任务:

    第一步----要先去打开redis服务器,从setting中可以看到我们依赖redis实现异步任务。

    第二部----启动项目,python manage.py runserver

    第三步----启动celery异步,celery worker -A Celery_ttoia -l info -P eventlet   (重开一个端口启动,包含manage.py的文件夹下--即项目同名文件夹)

    ----------------

    定时任务的配置----settings.py

    ----settings.py----
    
    from celery.schedules import crontab
    from datetime import timedelta
    
    CELERY_BEAT_SCHEDULE={
        'celery_work':{
            'task':'app.tasks.aync_test',       #指定异步任务
            'schedule':timedelta(seconds=20)    #设置定期时间,每20秒启动一次任务
    
        }
    }
    ----settings.py----
    #每周启动一次
    
    from celery.schedules import crontab
    from datetime import timedelta
    
    CELERY_BEAT_SCHEDULE={
        'celery_work':{
            'task':'app.tasks.aync_test',                           #指定异步任务
            'schedule': crontab(hour=7.minute=30 ,day_of_week=1)    #设置定期时间,每周一早7点30启动
    
    
        }
    }

    启动定时任务与启动异步任务相同,都需要在开启一个终端,celery -A  Celery_ttoia beat -l info

    此时已经开启了三个终端  ~.~

  • 相关阅读:
    bootstrap-datetimepicker 十年视图、年月视图 附源码
    java面向对象程序设计的五个特性
    简述rtsp,rtmp,http三个协议
    iOS 实现毛玻璃效果
    一个裁剪图片的小工具类,通过一句代码调用
    iOS 中的正则匹配(工具类方法)
    博客园不支持Markdown语法,新博客将发在简书...
    一行代码,让你的应用中UIScrollView的滑动与侧滑返回并存
    仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-10系统,3行代码即可集成.
    分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo <时间选择器&多行输入框&日期选择器>
  • 原文地址:https://www.cnblogs.com/little-sailor/p/13439543.html
Copyright © 2011-2022 走看看