在运行时添加、修改、删除celery.schedules

8 投票
1 回答
2921 浏览
提问于 2025-04-18 07:00

有没有办法在运行时添加、修改或删除celery.schedules?我需要一个能定期读取数据库表格,以了解调度列表的东西。

文档说可以使用 djcelery.schedulers.DatabaseScheduler 来实现我想要的功能,但我不太确定怎么做。

我看过 如何动态添加/删除Celery的定时任务(celerybeat),但还是不太明白。

谢谢你的帮助!

1 个回答

14

当你在应用设置中进行配置时:

CELERYBEAT_SCHEDULER='djcelery.schedulers.DatabaseScheduler'

celery beat 这个进程会检查 Django 的 PeriodicTask 模型,看看应该执行哪个任务。

你可以通过修改 Django 模型来添加、修改或删除这些任务:

from djcelery.models import PeriodicTask, CrontabSchedule

every_hours_crontab = CrontabSchedule(minute=0)
every_hours_crontab.save()

periodic_task = PeriodicTask(
    name='Call my task every hour',
    task='myproject.tasks.mytask',
    crontab=every_hours_crontab,
    args=json.dump([arg1, arg2]),
    kwargs=json.dump({'foo': 'bar'})
)
periodic_task.save()

你还可以通过 Django 管理面板测试不同的 PeriodicTask 配置:
http://localhost:8000/admin/djcelery/crontabschedule/add/
http://localhost:8000/admin/djcelery/periodictask/

撰写回答