django项目用celery实现定时任务

celery beat 简介

在项目开发过程中,经常遇到要定期执行的任务,如定期备份数据,检查设备状态,定时发送邮箱等,celery beat 是1个开发效率很高的定时任务框架,而且运行非常稳定。

Celery 是基于python开发的分布式异步消息任务队列,通过它可以实现任务的异步处理以及定时任务的处理,

Celery 架构中的主要角色有

  • Worker, 任务函数
  • Broker 消息队列
  • Client 客户端 ,发出调用任务函数的请求
  • Backend: 保存worker 执行完任务函数后的结果

celery 原理图如下

django项目用celery实现定时任务_第1张图片

celery beat

celery beat 是1个任务执行规划器,可以按定时,按间隔来执行 task,
默认是用 CELERYBEAT_SCHEDULE 配置项来设置定时任务。

celery beat 不仅可以用于 django项目,也可以用于flask, tornado等其它python项目。

定时任务实现步骤

1、 TimeZone.

默认使用UTC, celeryconfig.py 要添加:
CELERY_TIMEZONE=‘Asia/Shanghai’

2、定时任务配置

可以配置在 celerybeat-schedule 文件中,也可以在 celeryconfig.py 中

(1) 按间隔来启动任务

配置项名称: 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)

(2)按定时方式来配置 schedule

在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 方法,常见的使用方式:

django项目用celery实现定时任务_第2张图片

3. 启动定时任务管理

先启动 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

你可能感兴趣的:(django,python,后端)