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

Celery Worker无法执行Django数据库更新任务的原因排查

问题:Celery任务执行成功但Django模型数据库更新未生效

场景还原

开发需运行长时间后台任务的仪表盘,用Celery执行异步操作更新Section模型的data字段。任务返回成功提示,但数据库中对应字段未发生变化。尝试用事务包裹操作也无法解决,最终定位到Docker容器配置问题。

相关代码

tasks.py 异步任务函数

@shared_task()
def generate_content_async(id):
    data = get_data() # 长时间运行的操作
    
    section = Section.objects.get(id = id)
    section.data = data
    section.save()

    return f"Section with section id: {id} updated"

Section模型定义

class Section(models.Model):
    data = models.TextField()  # 存储逗号分隔的关键词字符串,如"Ebooks, Webinars, Case Studies"
    count = models.IntegerField(default= -1)

排查与解决方案

  • 先排除代码逻辑问题:确认任务实际执行(返回成功信息)、模型字段操作语法正确、事务包裹后仍无效。
  • 最终定位核心原因:Docker环境下Django和Celery容器未共享文件系统。若用SQLite作为数据库,两个容器各自持有独立的数据库文件副本;或代码目录未同步,导致Celery使用的模型/配置与Django不一致。
  • 解决方法:为Django和Celery容器添加绑定卷,同步以下目录:
    • 项目代码目录,确保两个容器使用相同版本的Django代码和模型定义
    • 若使用SQLite,同步数据库文件所在目录,让两个容器共享同一个数据库文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:35