Celery Beat 是 Celery 框架的一个内置组件,专门用于定时任务调度。它可以按照预设的时间规则(如固定间隔、特定时间点、CRON 表达式等)自动触发 Celery 任务,广泛应用于需要周期性执行的场景(如定时数据备份、日志清理、报表生成等)。
工作原理
简单来说,Celery Beat 是 “定时发令枪”,而 Worker 是 “执行者”。
默认情况下,任务配置存储在内存中,重启后会丢失。需要通过后端存储(如数据库)实现持久化,确保任务配置不丢失。
| 项目名称 | 说明 |
|---|---|
| django-celery-beat | 通过数据库实现任务配置持久化 |
| django-celery-results | 通过数据库实现任务结果持久化 |
| django-celery | 只支持Celery 3.X版本(不推荐) |
安装
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项目根目录(包括manage.py的目录)执行python manage.py migrate django_celery_beat python manage.py migrate django_celery_resultsSH复制全屏

发现任务:Celery 将自动从所有已安装的应用APP中发现任务,需要遵守以下目录结构
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046763/viewspace-3091251/ ,如需转载,请注明出处,否则将追究法律责任。