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

Flask+Celery+Docker Compose启动报错:'cached_property'无lock属性

解决AttributeError: 'cached_property' object has no attribute 'lock'错误(Flask+Celery+Docker场景)

问题背景

按照Flask+Celery多文件项目教程搭建环境,执行docker compose up时,Web服务和Celery服务均抛出AttributeError: 'cached_property' object has no attribute 'lock'错误,搜索技术社区后未找到有效解决方向。

报错根源

从报错栈可定位到问题出在kombu/utils/objects.py的__set__方法中:该代码尝试访问cached_property对象的lock属性,但Python 3.12移除了functools.cached_property的lock属性,而旧版本的Kombu(Celery的依赖库)未适配这个变更。

你的环境使用了Python 3.12(从报错路径/usr/local/lib/python3.12可确认),但教程发布于2023年1月,当时Python 3.12尚未发布,因此教程依赖的Celery/Kombu版本不兼容Python 3.12。

解决方案

方案1:降级Python版本(最稳妥,匹配教程环境)

修改项目的Dockerfile,将基础镜像从Python 3.12改为Python 3.11或更低版本,例如:

# 替换原有的python:3.12镜像
FROM python:3.11-slim

# 后续构建步骤保持不变
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

修改后重新构建镜像并启动:

docker compose build
docker compose up

方案2:升级Celery/Kombu到兼容Python 3.12的版本

更新项目的requirements.txt,指定支持Python 3.12的Celery和Kombu版本(Celery 5.3.0及以上版本已适配Python 3.12):

# 替换原有的Celery版本
celery>=5.3.0
flask>=2.2.0
redis>=4.5.0
# 其他依赖保持不变

重新构建镜像并启动,确保依赖更新到兼容版本。

方案3:临时补丁(仅应急测试,不推荐长期使用)

如果暂时无法修改版本,可以在容器内临时修改Kombu的代码:

  1. 进入运行中的容器(或构建时修改):
docker exec -it <容器ID> /bin/bash
  1. 编辑/usr/local/lib/python3.12/site-packages/kombu/utils/objects.py,找到cached_property类的__set__方法,将:
with self.lock:

替换为:

# 移除lock相关代码,直接执行赋值
if instance is None:
    return self
if self.name not in instance.__dict__:
    instance.__dict__[self.name] = value

这种方法仅临时生效,容器重启后会失效,仅适合快速验证问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:01:05