例如项目名为porject
项目下(与配置文件同层):
project/__init__.py
:
1 | from .celery import app as celery_app |
创建project/celery.py
:
1 | # -*- coding: utf-8 -*- |
修改配置文件project/settings/base.py
:
1 |
|
app下demo/tasks.py
:
1 | from __future__ import absolute_import |
启动worker
1 | # 这里我指定了配置,默认的话忽略info后面 |
(测试)直接执行任务:
进入项目内shell环境下:1
2from demoapp.tasks import add
add.delay(4, 4)
上面的worker log中出现return值为16就说明celery配置完成。
django-celery
的定时任务功能
celery beat定时或者定间隔给celery发送task
配置即:1
2# proj/settings.py
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
需要迁移:1
python manage.py migrate
可以后台配置任务执行间隔(或者定时器直接指定)
1 | python manage.py celery beat |
时间间隔
- 设置秒数
1 | @periodic_task(run_every=10) |
- 通过datetime设置时间间隔
1 | @periodic_task(run_every=datetime.timedelta(hours=1, minutes=15, seconds=40)) |
- celery的crontal表达式
1 | @periodic_task(run_every=crontab()) |
表示每分钟0秒时刻执行一次
七个参数:(常用的五个)
(1). minute
: 分,范围0~59
(2).hour
: 小时,范围0~23
(3).day_of_week
:星期,范围0~23
(4).day_of_month
: 每个月几号,范围1~31
(5).month_of_year
:月份,范围1~12
默认:1
crontab(minute='*', hour='*', day_of_week='*', day_of_month='*', month_of_year='*')
每天每小时每分钟执行一次(每分钟执行一次任务)。
具体某个值1
crontab(minute=15)
每小时的15分时刻执行一次任务
1 | crontab(minute=0, hour=0) |
每天0点0分时刻执行一次任务
设置范围1
crontab(minute='*', hour='9-12')
每天指定9点到12点每个小时的每分钟执行任务(
*
号是默认值,可以省略)。
1 | crontab(hour='9-12,20') |
逗号是or逻辑关系,指定(1点到12点)和(20点)中每分钟执行任务
celery提供了一个类得到表达式解析结果:1
2
3from celery.task.schedules import crontab_parser
r = crontab_parser(23, 0).parse('9-12,20')
print(r)
>
1 set([9, 10, 11, 12, 20])
设置间隔步长
1 | crontab(day_of_month='1,3,5,7,9,11') |
设置1、3、5、7、9、11月份每天每分钟执行任务
1 | crontab(minute='*/2') |
这个/号是步长,每隔2分钟执行一次,相当于range的第三个参数
range(0, 59+1, 2)