Celery Beat 动态热加载与分布式锁调度
基于 Django-Celery-Beat 实现运行时动态修改定时任务,无需重启 worker,并引入 Redis 分布式锁防重入。 · 难度:入门 · +10XP
Celery Beat 动态热加载与分布式锁调度
大部分教程只演示静态 crontab 配置。本教程教你如何通过 Django Admin 实时增加/修改定时任务,同时利用 Celery Beat 的数据库调度模型(DatabaseScheduler)。进一步,你将学习如何为同一个任务添加 Redlock 分布式锁,避免多个 worker 同时重复执行关键任务(如生成报表、数据同步)。代码将包括自定义锁装饰器和 beat 配置。
from django_celery_beat.models import PeriodicTask, IntervalSchedule
def create_dynamic_task(name, interval_seconds, task_path):
schedule, _ = IntervalSchedule.objects.get_or_create(
every=interval_seconds,
period=IntervalSchedule.SECONDS
)
PeriodicTask.objects.create(
name=name,
task=task_path,
interval=schedule,
enabled=True
)