使用 Celery Beat 调度任务
按计划运行周期性任务
使用 Celery Beat 调度任务 是 CoddyKit 上的免费 Django Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Django Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Django Academy 课程共包含 4 节课。
不止一次性任务
到目前为止,任务会在您将其加入队列时运行。但有些工作应该按时执行:每晚生成报告、每小时清理数据、每周发送摘要。这正是 Beat 发挥作用的地方。⏰
什么是 Celery Beat
Celery Beat 是一个调度器。它是一个独立进程,会按时唤醒,并将计划任务放入与工作进程读取的同一个队列中。
Beat 加工作进程
Beat 只负责按计划将任务加入队列,不会自行运行任务。您仍然需要运行工作进程,才能实际执行 Beat 加入队列的任务。
安装调度器
django-celery-beat 软件包会将调度计划存储在数据库中,因此之后甚至可以从管理后台编辑它。请先安装该软件包。
pip install django-celery-beat定义 Beat 调度计划
在设置中,CELERY_BEAT_SCHEDULE 是一个字典,用于将名称映射到任务路径及其运行频率。
CELERY_BEAT_SCHEDULE = {
"daily-report": {
"task": "reports.tasks.send_report",
"schedule": 86400.0,
},
}以秒为单位的间隔
一个普通数字表示“每 N 秒一次”。因此,86400.0 表示每天一次,3600.0 表示每小时一次。这种方式简单,但对于实际日历来说有些僵化。
使用 Crontab 应对实际日历
如果要设置“每周一上午 8 点”,请使用 crontab 调度计划。它的写法类似 cron 行,可以精确处理日期、小时和分钟。
from celery.schedules import crontab
schedule = crontab(hour=8, minute=0, day_of_week=1)接入 Crontab
将 crontab 对象直接放入调度计划值中,即可精确控制任务何时触发。
"weekly-digest": {
"task": "news.tasks.digest",
"schedule": crontab(hour=8, minute=0, day_of_week="mon"),
}运行 Beat 进程
在独立的终端中启动 Beat,并让它与工作进程并行运行。现在您有三个进程:Web 服务器、工作进程和 beat 调度器。
celery -A myproject beat -l info避免重复运行 Beat
只运行一个 Beat 进程。两个调度器会让每项工作触发两次,从而可能重复发送邮件或重复向用户收费。🚫
从管理后台编辑调度计划
使用 django-celery-beat 后,调度计划会存储在数据库中,因此非开发人员也可以直接从 Django 管理后台添加或暂停周期性任务。
快速检查
Celery Beat 与工作进程之间是什么关系?
回顾:计划任务
Celery Beat 使用间隔或 crontab 按计划将任务加入队列。请确保只运行一个 Beat 和一个工作进程,并从管理后台编辑调度计划。🗓️
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「使用 Celery Beat 调度任务」课时是免费的吗?
是的 — 「使用 Celery Beat 调度任务」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Django Academy 课程的其余内容,请升级到 CoddyKit PRO。 Django Academy 课程共包含 4 节课。
「使用 Celery Beat 调度任务」这节课中我会学到什么?
按计划运行周期性任务 你通过在浏览器中直接运行的动手代码来练习 Django Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Django Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Django Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 Celery Beat 调度任务」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Django Academy 课中编写并运行代码吗?
能。每节 Django Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 为什么需要后台任务
- 使用代理设置 Celery
- 编写和调用 @shared_task
- 使用 Celery Beat 调度任务