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

首次启动Celery对接Redis报错:AttributeError: 'NoneType'无'Redis'属性

问题根因

该AttributeError报错核心是Redis Python客户端(redis-py)版本与当前Celery/Kombu版本不兼容:高版本redis-py(≥4.0)调整了内部导入结构,低于5.3版本的Kombu无法识别对应Redis类,加载时出现redis对象为None、找不到Redis属性的异常。除此之外配置代码中存在的逻辑错误也会影响启动。

修复步骤
  • 调整依赖版本
    先卸载现有不兼容的依赖包,安装经过验证的稳定兼容组合:

    pip uninstall redis kombu celery
    # 适配Django场景的稳定版本组合
    pip install celery==5.2.7 kombu==5.2.4 redis==3.5.3
    

    若需要使用高版本redis-py,直接将Celery和Kombu都升级到最新稳定版即可。

  • 修复celery.py配置错误
    现有配置缺os模块导入、存在缩进错误,且未指定配置命名空间,修正后代码如下:

    import os
    from celery import Celery
    from django.conf import settings
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_test.settings')
    
    app = Celery('celery_test')
    # 指定配置命名空间,避免和Django其他配置冲突
    app.config_from_object('django.conf:settings', namespace='CELERY')
    app.autodiscover_tasks()
    
    @app.task(bind=True)
    def debug_task(self):
        print(f'Request: {self.request!r}')
    
  • 修正settings.py配置
    匹配Celery命名空间要求调整配置项,同时指定Redis数据库编号避免业务冲突:

    #celery配置
    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TIMEZONE = 'Asia/Kolkata'
    
  • 修正tasks.py重复初始化问题
    项目根目录已经初始化了全局Celery实例,不需要在任务文件中重复创建,改用shared_task装饰器注册任务即可:

    from celery import shared_task
    
    @shared_task
    def add(x, y):
        return x + y
    
验证方法

修改完成后执行以下命令启动Celery worker,无报错即为修复完成:

celery -A celery_test worker --loglevel=info

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:02