资料
概念
没有名为djcelery的包
有名为django-celery的包
代码引入import djcelery
celery版本 |
系统 |
支持 |
all |
Linux |
√ |
4.0以上 |
Windows |
× |
4.0以下 |
Windows |
√ |
命令 |
作用 |
pip install eventlet |
windows下运行celery 4+版本,要装 |
pip install folower |
监控celery运行任务状态 |
安装
pip install celery==3.1.26.post2 django-celery==3.2.2 flower==0.9.2
pip install Django-celery==3.3.1 # django3以上的需要安装
pip install Django-celery==3.2.2 # django2
配置 settings.py
import djcelery
# 当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。
djcelery.setup_loader()
#broker是代理人,它负责分发任务给worker去执行。此处用的是Redis作为broker
BROKER_URL = 'redis://127.0.0.1:6379/1'
# 导入目标任务文件 tasks.py ,即每个app包含有 @task 装饰器的函数文件
CELERY_IMPORTS = ('app01.tasks')
# 设置时区
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_ENABLE_UTC = True
#表示使用了django-celery默认的数据库调度模型,任务执行周期都被存在默认指定的orm数据库中.
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
# RESULT_BACKEND 结果保存数据库
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
'djcelery', #加入djcelery 也就是为了在django admin里面可一直接配置和查看celery
]
注册app后就可以生成对应表
python manage.py makemigrations # 不需要make直接下方migrate就可以生成表格
python manage.py migrate
djcelery_crontabschedule
djcelery_intervalschedule
djcelery_periodictask # 记录任务信息表
djcelery_periodictasks
djcelery_taskstate
djcelery_workerstate
继续配置
# 下面是定时任务的设置,我一共配置了三个定时任务.
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
#定时任务一: 每24小时周期执行任务(del_redis_data)
u'删除过期的redis数据': {
"task": "app.tasks.del_redis_data",
"schedule": crontab(hour='*/24'),
"args": (),
},
#定时任务二: 每天的凌晨12:30分,执行任务(back_up1)
u'生成日报表': {
'task': 'app.tasks.back_up1',
'schedule': crontab(minute=30, hour=0),
"args": ()
},
#定时任务三:每个月的1号的6:00启动,执行任务(back_up2)
u'生成统计报表': {
'task': 'app.tasks.back_up2',
'schedule': crontab(hour=6, minute=0, day_of_month='1'),
"args": ()
},
}
tasks.py
在app下新建tasks.py,必须要是tasks.py文件名称,django会自动查找到app下的该文件
# coding=utf-8
from celery import task
@task()
def del_redis_data():
# 此处是一个删除redis数据的操作。具体略过
@task()
def back_up1():
# 此处是一个备份到日报表的操作。具体略过
@task()
def back_up2():
# 此处是一个生成统计报表的操作。具体略过
启动
python manage.py runserver # 启动web服务
python manage.py celery beat -l info # 启动celery beat
python manage.py celery worker -l info # 启动celery woker