zoukankan      html  css  js  c++  java
  • Django中Celery简介

    初识Celery:

    Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,可将一些耗时的任务放入该消息队列中处理,一些定时任务也可以放入队列中自动执行,如定期去统计日志,数据备份,或者其他的统计任务。

    Celery基本工作流程:

    Celery的安装与配置

    pip install celery
    pip install celery-with-redis
    pip install django-celery
    apt install redis-server
    三方库的安装

    django中的配置:

    ALLOWED_HOSTS = ['*']
    INSTALLED_APPS = (
          ...
          'djcelery',
        }
    
    import djcelery
    djcelery.setup_loader()
    BROKER_URL='redis://localhost:6379/1' #任务队列存放的位置
    CELERY_CONCURRENCY=2  #设置worker的并发数量
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/2' #结果存放的位置
    View Code

    在settings的同级目录下新建一个celery.py的文件

    from __future__ import absolute_import  #绝对路径导入
    from celery import Celery    
    from django.conf import settings
    import os
    
    #设置系统的环境配置用的是Django的
    os.environ.setdefault('DJANGO_SETTING_MODULE','day9_ex.settings')
    #实例化celery
    app = Celery('mycelery')
    #设置时区
    app.conf.CELERY_TIMEZONE = 'Asia/Shanghai'
    #指定celery的配置来源 用的是项目的配置文件settings.py
    app.config_from_object('django.conf:settings')
    #让celery 自动去发现我们的任务(task)
    app.autodiscover_tasks(lambda : settings.INSTALLED_APPS)    
    View Code

    在settings.py的同级目录的__init__.py文件中导入

     #要写在第一行
    from __future__ import absolute_import  
     #导入工程目录下celery中的app并起别名
    from day9_ex.celery import app as celery_app 
    View Code

    Celery的使用

    在需要使用异步任务的app目录下新建tasks.py,将要执行的异步任务放在这里面

    from celery import task
    import time
    
    @task
    def test(n):
        for i in range(n):
            print(i)
            time.sleep(3)
    View Code

    在views视图函数中进行调用

    from django.http import HttpResponse
    from django.shortcuts import render
    from app.tasks import test
    
    
    def test_celery(req):
        test.delay(6)
        return HttpResponse('ok')
    View Code

    开始执行之前要先进行数据库表的迁移

    然后启动worker,命令为python manage.py celery worker --loglevel=info (或者celery -A 工程名 worker -I info)      (PS:日志级别可以不写)

    然后在浏览器输入url启动项目

    注意:修改tasks.py的内容后要重启celery的服务!

    定时任务的配置:
    在上述配置的基础上在settings.py中加入下面配置

    from datetime import timedelta
    
    CELERYBEAT_SCHEDULE = {
        'schedule-test': {
            'task': 'app.tasks.test2',   #指定要执行的函数
            'schedule': timedelta(seconds=6),   # 执行的计划时间,每6秒执行一次,可自定义
            'args': ()  #参数
        },
    
    }
    View Code

    还可使用下面这种配置

    from celery.schedules import crontab
    
    CELERYBEAT_SCHEDULE = {
        'schedule-test': {
            'task': 'app.tasks.test2',  #指定要执行的函数
            'schedule': crontab(minute=48,hour=11),   # 指定具体执行的计划时间
            'args': ()   #参数
        },
    
    }
    View Code

    crontab的参数设置如上图,也可以一个参数设置多个值,如day_of_week='1,2',表示每周一周二。

    具体使用同异步处理。

    先启动python manage.py celery worker,再启动python manage.py celery beat

    注意:你的任务一定要确保是可以正常执行的

     

     

    Fake it,till you make it
  • 相关阅读:
    二分-hdu-4768-Flyer
    UVa 340 Master-Mind Hints (优化查找&复制数组)
    Android中的多媒体显示之图片缩放
    asp.net总结(一)
    JAVA中JNI的简单使用
    HDFS集群balance(2)-- 架构概览
    [置顶] 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam
    HDFS集群balance(3)-- 架构细节
    项目总结——深入浅出socket网络编程
    HDFS集群balance(4)-- 测试计划
  • 原文地址:https://www.cnblogs.com/wusir66/p/9892209.html
Copyright © 2011-2022 走看看