You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django项目中启动Celery Worker时遇报错的问题求助

解决Django+Celery启动Worker时的模块错误问题

看起来你遇到的问题核心是Celery应用的指向错误以及项目路径配置问题,结合你的项目结构,我来一步步帮你解决:

先分析你遇到的错误原因

  • 在根目录(manage.py所在)执行celery -A tasks worker...:Celery会尝试找名为tasks的模块,但你的tasks在app目录下,而且Celery的核心实例是在project/project/celery.py里,所以找不到。
  • 在project子目录执行同样命令:依然找不到tasks模块,而且这里的路径上下文不对,应该在根目录执行命令。
  • 在app目录执行:tasks.py里没有定义Celery实例(你的实例在celery.py里),所以Celery找不到tasks.celery这个属性。

解决方案步骤

1. 确保project/__init__.py正确导入Celery实例

打开project/project/__init__.py,添加以下代码,让Django启动时自动加载Celery:

from .celery import app as celery_app

__all__ = ('celery_app',)

2. 检查celery.py的配置是否正确

你的project/project/celery.py应该包含这些关键配置,确保它能加载Django设置并自动发现任务:

import os
from celery import Celery

# 设置Django环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

# 创建Celery实例
app = Celery('project')

# 从Django的settings里加载Celery配置,使用CELERY_前缀的设置
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现所有app里的tasks.py文件
app.autodiscover_tasks()

3. 确保app/tasks.py里的任务正确装饰

用@shared_task装饰任务(这样不需要直接引用Celery实例),示例:

from celery import shared_task

@shared_task
def my_background_task():
    # 你的任务逻辑
    print("后台任务执行中...")

4. 使用正确的启动命令

必须在manage.py所在的根目录执行以下命令,-A后面指定的是你的Celery应用所在的模块(也就是project子目录,对应celery.py所在的模块):

celery -A project worker --loglevel=info

为什么这个命令能解决问题?

-A project告诉Celery去加载project模块下的celery.py文件,里面定义了Celery实例app,同时app.autodiscover_tasks()会自动扫描所有Django app里的tasks.py文件,这样Celery就能找到你的任务了。

内容的提问来源于stack exchange,提问作者arush1836

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:38:24