构建动态任务调度器:运行时修改Crontab与间隔
使用Django内置的数据库调度接口,结合Celery Beat,实现无需重启即可增删改定时任务。 · 难度:入门 · +10XP
构建动态任务调度器:运行时修改Crontab与间隔
本教程将指导你利用 django-celery-beat 的数据库模型,创建一个可在运行时动态创建、暂停、修改定时任务的REST API。你将深入理解 PeriodTask、CrontabSchedule 和 IntervalSchedule 的内部结构,并学会如何安全地更新调度器而不丢失正在执行的任务。最终你将得到一个完全由数据库驱动的定时任务管理系统,让运营人员通过后台直接调整任务频率。
from django_celery_beat.models import PeriodicTask, CrontabSchedule
from datetime import datetime
schedule, _ = CrontabSchedule.objects.get_or_create(
minute='30', hour='*', day_of_week='*',
day_of_month='*', month_of_year='*'
)
task = PeriodicTask.objects.create(
name='dynamic-task-1',
task='myapp.tasks.send_report',
crontab=schedule,
start_time=datetime.utcnow(),
enabled=True
)