ITPub博客

首页 > 大数据 > Hadoop > Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战

Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战

原创 Hadoop 作者:lxz2266 时间:2025-07-16 07:58:20 0 删除 编辑

Celery Beat 介绍

Celery Beat 是 Celery 框架的一个内置组件,专门用于定时任务调度。它可以按照预设的时间规则(如固定间隔、特定时间点、CRON 表达式等)自动触发 Celery 任务,广泛应用于需要周期性执行的场景(如定时数据备份、日志清理、报表生成等)。

工作原理

  • Beat 进程:独立运行的调度进程,负责解析定时规则并生成任务消息。
  • 任务发送:当到达预设时间,Beat 进程将任务发送到 Celery 的消息队列(如 Redis)。
  • 任务执行:Celery Worker 进程从队列中获取任务并执行。

简单来说,Celery Beat 是 “定时发令枪”,而 Worker 是 “执行者”。

Celery Beat 配置持久化

默认情况下,任务配置存储在内存中,重启后会丢失。需要通过后端存储(如数据库)实现持久化,确保任务配置不丢失。

项目名称 说明
django-celery-beat 通过数据库实现任务配置持久化
django-celery-results 通过数据库实现任务结果持久化
django-celery 只支持Celery 3.X版本(不推荐)

二、Celery Beat与Django集成

安装配置

安装

pip install django-celery-beat django-celery-results

在Django项目 settings.py中添加

INSTALLED_APPS = [
    ...    'django_celery_beat',    'django_celery_results']### Celery 配置CELERY_BROKER_URL = f"{REDIS_URL}/{REDIS_DB}"  # 使用Redis作为消息代理CELERY_RESULT_BACKEND = "django-db"  # 使用数据库存储结果CELERY_BEAT_SCHEDULER = (    "django_celery_beat.schedulers:DatabaseScheduler"  # 使用数据库保存定时任务)
CELERY_TIMEZONE = "Asia/Shanghai"CELERY_ENABLE_UTC = TrueCELERY_RESULT_EXTENDED = True  # 启用后才会记录 task_name、date_started 等字段CELERY_TASK_TRACK_STARTED = True  # 记录任务开始时间

定义 Celery 实例:创建文件 mysite\mysite\celery.py

"""定义和配置 Celery 实例"""import osfrom celery import Celeryfrom django.conf import settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")# 创建 Celery 实例app = Celery("mysite")# 加载配置文件中的 Celery 配置app.config_from_object("django.conf:settings", namespace="CELERY")# 自动发现并加载任务app.autodiscover_tasks(["myapp_infra", "myapp_system"] + settings.MY_APPS, force=True)

配置 Django 启动时会加载应用:修改文件 mysite\mysite\__init__.py

"""Django 启动时加载Celery实例"""from .celery import app as celery_app
__all__ = ("celery_app",)

数据库迁移

执行数据库迁移,创建相关数据库表。其中:

  • django_celery_beat_periodictask:用于存储任务名称、任务路径、任务参数等元数据。
  • django_celery_beat_crontabschedule:用于存储CRON表达式。
# 在Django项目根目录(包括manage.py的目录)执行python manage.py migrate django_celery_beat
python manage.py migrate django_celery_resultsSH复制全屏

image-20250416091830705

三、Celery Beat项目实战

定义Celery任务

发现任务:Celery 将自动从所有已安装的应用APP中发现任务,需要遵守以下目录结构


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046763/viewspace-3091251/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-06-14

  • 博文量
    14
  • 访问量
    13510