Django中Celery简介

初识Celery:

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

Celery基本工做流程:
redis

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的文件django

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视图函数中进行调用app

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启动项目ide

注意:修改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

注意:你的任务必定要确保是能够正常执行的

相关文章
相关标签/搜索