任务心跳管理进程
- Beat
任务调度器
- PersistentScheduler (默认)
- DatabaseScheduler
任务存储
- File Configuration
- Database
工作流
- Beat 调用 Task Scheduler 获取任务信息
- 检查任务状态
- 到了执行时间 就去执行
- 保存 任务的执行结果
安装
安装 beat
python3 -m pip install django-celery-beat
数据库变更
注册应用 修改settings添加配置
INSTALLED_APPS = [
'django_celery_beat'
]
python3 manage.py makemigrations
python3 manage.py migrate
使用 DatabaseScheduler 启动 beat 或者在 配置中设置 beat_scheduler
使用 DatabaseScheduler
DJANGO_SETTINGS_MODULE=settings.develop celery -A wangdalei beat --scheduler django_celery_beat.schedulers:DatabaseScheduler
--scheduler django_celery_beat.schedulers:DatabaseScheduler 使用数据库进行存储数据 数据会存储到 django_celery_beat中
admin后台可以看到数据库模型
管理定时任务的方法
- 在 Admin 后台添加管理定时任务
- 系统启动时自动注册定时任务
- 直接设置应用的 beat_schedule
- 运行时添加定时任务
方式一 在 Admin 后台添加管理定时任务
方法二 系统启动时自动注册定时任务
wangdalei_dj/wangdalei/celery.py
from celery.schedules import crontab
@app.task
def test(arg):
print(arg)
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls test('hello') every 10 seconds.
sender.add_periodic_task(10.0, test.s('hello'), name='hello every 10')
# Calls test('world') every 30 seconds
sender.add_periodic_task(30.0, test.s('world'), expires=10)
# Executes every Monday morning at 7:30 a.m.
sender.add_periodic_task(
crontab(hour=7, minute=30, day_of_week=1),
test.s('Happy Mondays!'),
)
主应用中做了配置 当主应用被调用时 会连带的启动celery应用 wangdalei_dj/wangdalei/init.py
from __future__ import absolute_import, unicode_literals
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
__all__ = ('celery_app',)