在创建网页应用时,常常需要执行 耗时较长的任务。例如:
- 当用户注册时,需要发送认证邮件。
- 每天晚上12点,需要自动执行数据清理任务。
- 当用户预约某项任务时,需要在指定时间执行。
Django 默认以即刻回应请求的方式运作,因此,需要有异步处理耗时任务的方法。 这就是 Celery 的用武之地!🚀
Celery 是一个帮助 Django 执行异步任务的强大工具,而 Celery-Beat 则可以帮助在预定时间执行特定任务。
1️⃣ 在 Django-Celery-Beat 中设置定时任务的方法
在 Celery-Beat 中设置定时任务的方法大致有两种。
✅ (1) 通过 Django Admin 的 GUI 设置定时
Django-Celery-Beat 支持直接在 Django Admin 中通过 GUI 设置定时任务。
📌 特点
- 可以通过简单的设置而不需编码来执行周期性任务。
- 可以在 Django 管理界面中通过UI 设置和修改周期性任务。
- 但,由于这是静态设置,因此很难根据用户请求动态更改。
📌 适合在什么情况下使用?
- 不需要与应用程序和用户之间的交互的情况
- 例如) 每天午夜自动执行数据备份的任务
- 例如) 每天早上星期一更新某些 API 数据的任务
✅ (2) 通过 Python 代码动态创建定时任务
也可以通过代码直接创建 Celery-Beat 的定时任务。
📌 特点
- 可以根据用户的请求动态创建定时任务。
- 可以通过代码创建、修改和删除定时任务。
- 无需通过 Admin,可以在视图中直接注册周期性任务。
📌 适合在什么情况下使用?
- 当需要根据用户的特定请求生成定时任务时。
- 例如) 用户"预约订单"后,注册在两个小时后自动取消的任务。
- 例如) 用户设置"邮件提醒"功能时,注册在规定时间发送提醒邮件。
2️⃣ [实践] 使用 Python 代码创建定时任务
步骤 1:定义 Celery 任务
from celery import shared_task
@shared_task
def send_reminder_email(user_id):
# 实现发送邮件的逻辑
print(f"📧 已向用户 {user_id} 发送了提醒邮件!")
步骤 2:在 Django-Celery-Beat 中创建 PeriodicTask 对象
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json
# 1️⃣ 创建执行间隔(Interval)(例如:每10分钟执行一次)
schedule, created = IntervalSchedule.objects.get_or_create(
every=10, # 10分钟间隔
period=IntervalSchedule.MINUTES
)
# 2️⃣ 创建 PeriodicTask
task = PeriodicTask.objects.create(
interval=schedule, # 执行间隔
name="发送提醒邮件", # 任务名称
task="myapp.tasks.send_reminder_email", # 要执行的 Celery 任务名称
args=json.dumps([1]), # 传递用户 ID(这里是示例,所以是用户 1)
)
🎯 结论:对 Django 开发者而言,Celery 是必需的!
Celery 是一个管理和调度异步任务的必备工具,对于 Django 来说更为重要。
特别是通过 Celery-Beat,您可以设置周期性任务,并根据特定事件动态管理调度。
📌 总结:
- Django-Celery-Beat 是一个执行定时任务的强大工具。
- 使用 Django Admin(GUI)可以轻松设置周期性任务。
- 通过 Python 代码创建任务可以根据用户请求灵活管理定时任务。
- 对于 Django 开发者而言,掌握 Celery 的基本概念和 Celery-Beat 是必不可少的!
🔥 下一篇预告
在这一篇中,我们简单介绍了如何通过代码创建 Celery-Beat 的定时任务。但在实际运用中,会通过 `PeriodicTask` 模型的更多字段来应对复杂的逻辑。
下一篇将深入探讨如何更加全面地安排各种任务,及 `PeriodicTask` 模型的每个字段的作用。
如果想了解更深入的 Celery 使用方法,请期待下一篇! 🚀
此外,如果您想查看更多与 Celery 相关的文章,请
在下面的‘相关帖子’列表中,或在右上角的搜索框中搜索“Celery”! 😊
댓글이 없습니다.