当前位置 博文首页 > yunweigo的博客:django celery 计划任务
设置时区
计划任务默认是时区使用的是UTC时间, 我们需要设置为国内的时区。
timezone = 'Asia/Shanghai'
针对django项目当中可以通过设置TIME_ZONE,
文件 proj/proj/settings
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
CELERY_TIMEZONE = TIME_ZONE
...
或者单独给celery进行设置
app.conf.timezone = 'Asia/Shanghai' # 设置时区
周期性任务
我们先执行一个简单的计划任务
每秒执行一次
# task.py
from celery import Celery
from celery.schedules import crontab
CELERY_RESULT_BACKEND = 'redis://127.0.0.1/5'
BROKER_URL = 'redis://127.0.0.1/6'
TIME_ZONE = 'Asia/Shanghai'
celery_task = Celery('tasks', backend=CELERY_RESULT_BACKEND, broker=BROKER_URL)
celery_task.conf.timezone = TIME_ZONE
celery_task.conf.beat_schedule = {
# 每秒执行一次
'add-every-monday-morning': {
'task': 'task.add',
'schedule': 1,
'args': (16, 16),
},
# 计划任务
'add-every-one-minute': {
'task': 'tasks.add',
'schedule': crontab(minute=1),
'args': (16, 16)
},
}
@celery_task.task
def add(x, y):
print(x + y)
return x + y
说明:crontab 时间表达式,具体的表达式参考附录
启动任务
celery -A msg worker -l INFO -B
[2021-04-10 10:11:59,745: WARNING/ForkPoolWorker-9] 32
[2021-04-10 10:11:59,781: INFO/ForkPoolWorker-9] Task task.add[e3bb80c6-f34b-49ed-8eb4-17b0b6153fde] succeeded in 0.03555258899999103s: 32
[2021-04-10 10:11:59,782: INFO/MainProcess] Received task: task.add[d442682d-1f5e-4717-b231-882803451e2f]
[2021-04-10 10:11:59,783: WARNING/ForkPoolWorker-9] 32
[2021-04-10 10:11:59,833: INFO/MainProcess] Received task: task.add[78a30223-6c91-492b-87e9-8ffe177a2eee]
[2021-04-10 10:11:59,835: INFO/ForkPoolWorker-9] Task task.add[d442682d-1f5e-4717-b231-882803451e2f] succeeded in 0.0518018430000069s: 32
[2021-04-10 10:11:59,835: WARNING/ForkPoolWorker-2] 32
具体计划任务表达式可以参看附录内容。
附录
例子 | 意义 |
---|---|
crontab() | 每分钟执行一次。 |
crontab(minute=0, hour=0) | 每天00点执行 |
crontab(minute=0, hour=’*/3’) | 每三个小时执行一次 |
crontab(minute=0,hour=‘0,3,6,9,12,15,18,21’) | 每3个小时执行一次,单独设置小时灵活配置 |
crontab(minute=’*/15’) | 每15分钟执行一次 |
crontab(day_of_week=‘sunday’) | 在星期日每分钟执行一次(! 这里需要注意,任务是每分钟执行一次) |
crontab(minute=’’,hour=’’, day_of_week=‘sun’) | 星期天,每分钟执行一次 |
crontab(minute=’*/10’,hour=‘3,17,22’, day_of_week=‘thu,fri’) | 在周四或周五的凌晨3-4点,下午5-6点以及晚上10-11点之间执行,每10分钟执行一次 |
crontab(0, 0, day_of_month=‘2’) | 在每个月的第二天执行。 |
crontab(0, 0,day_of_month=‘1-7,15-21’) | 在每月的第一和第三周执行。 |
crontab(0, 0, day_of_month=‘11’,month_of_year=‘5’) | 每年5月11日执行。 |
crontab(0, 0,month_of_year=’*/3’) | 在每个季度的第一个月每天执行一次。 |
后记
todo 整除计划任务完善
2021年200篇计划 第3篇
cs