Celery在Django中的应用

1、安装包

pip install django-celery django-redis flower

2、INSTALLED_APPS中加入 djcelery

INSTALLED_APPS = [
   ...
    'djcelery',       #加入djcelery
]

3、在settings.py中加入celery配置信息

######django-celery配置######
import djcelery
from celery.schedules import timedelta,crontab

djcelery.setup_loader()  # 开始加载当前所有安装app中的task

# 使用redis代理来分发任务
BROKER_URL = 'redis://127.0.0.1:6379/8'
CELERY_IMPORTS = ('post.tasks')  # 导入任务,可以执行的异步任务
CELERY_TIMEZONE = 'Asia/Shanghai'   # 中国时区

# 任务存入到数据库中
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

# 定时器策略
CELERYBEAT_SCHEDULE = {
    # 定时任务一:每隔30s运行一次
    u'邮件发送': {
        "task": "post.tasks.tsend_email",
        # "schedule": crontab(minute='*/2'),
        "schedule": timedelta(seconds=5),
        "args": (),
    },
    u'性能计算': {
        "task": "post.tasks.add",
        "schedule": crontab(minute='*/2'),
        "args": (1, 4),
    },
}

#####django-celery end########

4、在主工程目录添加celery.py

# encoding: utf-8
from __future__ import absolute_import  # 避免就近原则

import os
from celery import Celery
from django.conf import settings

# 设置项目运行的环境变量DJANGO_SETTINGS_MODULE
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
                      "DAdmin.settings")

#创建celery应用
app = Celery('AdminCelery')

# Celery加载配置
app.config_from_object('django.conf:settings')

# 如果在工程的应用中创建了tasks.py模块,那么Celery应用就会自动去检索创建的任务。
# 比如你添加了一个任务,在django中会实时地检索出来。
app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)

5、在自己的app中创建任务 tasks.py(每个任务本质上就是一个函数,在tasks.py中,写入你想要执行的函数即可)

# coding:utf-8
import time
from DAdmin.celery import app

@app.task
def tsend_email():
    time.sleep(10)
    print('send email ok!')


@app.task
def add(x, y):
    time.sleep(5)
    return x+y

6、迁移生成celery需要的数据库

python manage.py makemigrations

python manage.py migrate

7、在views.py中的某一请求处理函数中,调用tasks.py中任务

from post.tasks import tsend_email,add

def sendmail(request):
    ...
    tsend_email.delay()  # 执行任务
    # add.delay(1,2)  # delay(add函数的参数列表)

    return HttpResponse(json.dumps({'status':'ok'}), 'application/json')

8、启动相关服务

1)启动celery

python manage.py help  # 查看帮助 ,有djcelery命令区域

python manage.py celery worker -l info #  启动celery 注意:不会启动定时器

python manage.py celery -A DAdmin worker -B -l info   # 默认会启动DAdmin.celery,即会启动定时任务   注意-B在Window中不支持

2)启动flower ,flower是celery的web可视化管理平台

python manage.py celery flower

3)启动django项目,并发出views处理函数对应的请求url

猜你喜欢

转载自blog.csdn.net/qq_16069927/article/details/81132405
今日推荐