Celery配置解析

这是 Django 项目中使用 Celery 的标准初始化方式。创建 your_project/celery.py 文件的主要目的是:



为什么要创建 celery.py?

因为 Celery 本身是一个独立于 Django 的任务队列系统。我们需要一个入口来:

  1. 初始化 Celery 应用实例
  2. 加载 Django 的配置(settings.py)
  3. 告诉 Celery 去哪里找任务(tasks)


🔍 逐行解释

from celery import Celery
import os

# 设置默认 Django 设置模块(告诉 Celery 要使用哪个 settings.py)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
这行代码让 Celery 知道要加载哪个 Django 项目的配置,否则它无法找到数据库、broker 等设置。


app = Celery('your_project')
初始化一个 Celery 实例,这个名字通常就是你的项目名,用于区分日志等。


app.config_from_object('django.conf:settings', namespace='CELERY')
告诉 Celery:去 Django 的 settings.py 中查找以 CELERY_ 开头的配置项。

比如:

# settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'


app.autodiscover_tasks()
自动去你所有注册的 Django app 中查找 tasks.py 文件,导入里面的任务函数。

这就允许你在各个 app 中写:

# app1/tasks.py
from celery import shared_task

@shared_task
def my_task():
    ...


🧩 完整结构示例

项目结构通常如下:

your_project/
├── your_project/
│   ├── __init__.py      ← 需要在这里导入 celery 应用
│   ├── celery.py        ← Celery 配置文件
│   ├── settings.py
│   └── urls.py
├── app1/
│   ├── tasks.py         ← 写任务的地方
│   └── views.py


✨ 最重要的一步:在 __init__.py 中初始化 Celery 应用

你必须加上这句,否则 Django 启动时不会加载 Celery 应用:

# your_project/__init__.py

from .celery import app as celery_app

__all__ = ('celery_app',)


🚀 启动方式

确保 Redis 已运行,然后你可以在项目根目录下启动 worker:

celery -A your_project worker --loglevel=info

其中 your_project 是指包含 celery.py 的 Django 主模块。



是否需要我给你提供完整的 settings.py 中的 Celery 配置示例,或整合 Django + Celery 的最小可运行项目模板?

文章标签:

评论(0)