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

Django集成Celery运行异步任务报Received unregistered task错误如何解决

问题根因

第一个报错(任务未注册)的原因

你启动Celery时直接指定tasks2作为App入口,此时Celery识别到的my_multiply任务名为无前缀的my_multiply;但Django运行时调用该任务,Celery会自动为任务拼接完整模块路径,生成的任务名为app_scrape.tasks2.my_multiply,二者名称不匹配导致KeyError。

第二个报错(相对导入失败)的原因

你将任务移入views.py后,直接在app_scrape目录下启动Celery,此时Python将当前目录识别为顶级模块目录,无法识别app_scrape作为父包,因此views中使用的相对导入.from forms会触发报错,同时启动过程也没有加载Django运行环境,本身也无法正常引入Django相关依赖。

修复步骤
  1. 整合Celery到Django项目配置
    在proj_estategy/__init__.py中添加Celery全局配置:
import os
from celery import Celery

# 加载Django配置环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj_estategy.settings')

app = Celery('proj_estategy')
# 从Django settings读取Celery配置,配置项前缀统一为CELERY_
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动扫描所有已注册Django应用下的任务
app.autodiscover_tasks()
  1. 在Django settings中添加Celery连接配置
    在proj_estategy/settings.py末尾添加如下配置:
CELERY_BROKER_URL = 'amqps://mcbojxac:6sC7n38IdqmNoNgUjmjBkHum6RxRnaqt@clam.rmq.cloudamqp.com/mcbojxac'
CELERY_RESULT_BACKEND = 'db+postgresql://kbsrjinigbkzqu:ed0aab74c997b56aa756d510439e28404cf1e87de629a7af66bd49ae29961bbb@ec2-44-195-201-3.compute-1.amazonaws.com/d85tdjbd3am2sc'
  1. 重构tasks2.py代码
    删除原有独立Celery App定义,使用Celery共享任务装饰器:
from celery import shared_task

@shared_task
def my_multiply(x):
    print(x)
    return x
  1. 调整Celery启动命令
    回到项目根目录(即存放manage.py的src-estategy目录),执行如下启动命令:
celery -A proj_estategy worker -l info -P eventlet
  1. 原有业务代码无需修改
    views.py中的任务导入、delay调用逻辑保持原有写法即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:39:03