资料
概念
没有名为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作为brokerBROKER_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_crontabscheduledjcelery_intervalscheduledjcelery_periodictask # 记录任务信息表djcelery_periodictasksdjcelery_taskstatedjcelery_workerstate
继续配置
# 下面是定时任务的设置,我一共配置了三个定时任务.from celery.schedules import crontabCELERYBEAT_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-8from 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 beatpython manage.py celery worker -l info # 启动celery woker