在项目开发过程中,经常遇到要定期执行的任务,如定期备份数据,检查设备状态,定时发送邮箱等,celery beat 是1个开发效率很高的定时任务框架,而且运行非常稳定。
Celery 是基于python开发的分布式异步消息任务队列,通过它可以实现任务的异步处理以及定时任务的处理,
celery beat 是1个任务执行规划器,可以按定时,按间隔来执行 task,
默认是用 CELERYBEAT_SCHEDULE 配置项来设置定时任务。
celery beat 不仅可以用于 django项目,也可以用于flask, tornado等其它python项目。
默认使用UTC, celeryconfig.py 要添加:
CELERY_TIMEZONE=‘Asia/Shanghai’
可以配置在 celerybeat-schedule 文件中,也可以在 celeryconfig.py 中
配置项名称: CELERYBEAT_SCHEDULE ,可以在 init()里设置,或者在 celeryconfig.py 里设置。
from celery import Celery
from datetime import timedelta
app = Celery('demo') # 创建 Celery 实例
app.config_from_object('celery_app.celeryconfig') # 通过 Celery 实例加载配置模块
app.conf.update(
CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'tasks.add',
'schedule': timedelta(seconds=30),
'args': (16, 16)
},
}
)
代码说明
‘add-every-30-seconds’ , scheduler 名称
‘task’,要执行的任务函数
Schedule参数是时间间隔, 本例: 每隔30秒启动 tasks.add(), 参数为(16, 16)
在celery_app的 init()中, 添加定时任务配置项,
如下例 :每周一,7:30 执行 tasks.add(16,16)
from celery import Celery
from datetime import timedelta
from celery.schedules import crontab
app = Celery('demo') # 创建 Celery 实例
app.config_from_object('celery_app.celeryconfig') # 通过 Celery 实例加载配置模块
app.conf.update(
CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'tasks.add',
'schedule': timedelta(seconds=30),
'args': (16, 16)
},
# 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),
},
}
)
‘schedule’, 使用 crontab 方法,常见的使用方式:
先启动 beat
celery -A celery_app beat -l info
再启动 worker
celery -A celery_app worker -l info -P eventlet
windows 下要安装 eventlet 才能获得结果输出
启动 flower(默认地址是localhost:5555),方便通过web 图形化查看celery任务执行情况
celery -A celery_app flower