Scheduler
一種常見(jiàn)的需求是每隔一段時(shí)間執(zhí)行一個(gè)任務(wù).配置如下:
config.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import absolute_import
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/5'
BROKER_URL = 'redis://127.0.0.1:6379/6'
CELERY_TIMEZONE = 'Asia/Shanghai'
from datetime import timedelta
CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'proj.tasks.add',
'schedule': timedelta(seconds=30),
'args': (16, 16)
},
}
注意配置文件需要指定時(shí)區(qū).這段代碼表示每隔30秒執(zhí)行add函數(shù).
一旦使用了scheduler,啟動(dòng)celery需要加上-B參數(shù)
celery -A proj worker -B -l info
crontab
計(jì)劃任務(wù)當(dāng)然也可以用crontab實(shí)現(xiàn),celery也有crontab模式,修改config.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import absolute_import
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/5'
BROKER_URL = 'redis://127.0.0.1:6379/6'
CELERY_TIMEZONE = 'Asia/Shanghai'
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
# Executes every Monday morning at 7:30 A.M
'add-every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (16, 16),
},
}
總而言之,scheduler的切分度更細(xì),可以精確到秒.crontab模式就不用說(shuō)了.當(dāng)然celery還有更高級(jí)的用法,比如多個(gè)機(jī)器使用,啟動(dòng)多個(gè)worker并發(fā)處理等.