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