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

Django、Celery、SQS环境中Celery任务无法更新PostgreSQL数据库排查

问题:Celery任务无法更新AWS RDS PostgreSQL数据库对象

我尝试将蒙特卡洛(Monte Carlo)任务卸载到Celery执行,并将结果保存至AWS RDS PostgreSQL数据库。目前在views.py中已成功创建MonteCarloResultTrue对象,但tasks.py中的Celery任务无法更新该数据库对象。


views.py代码

newResults = MonteCarloResultTrue.objects.create(htmlCompanyArray = "[]")
viewRun = runMonteCarloAsync.delay(checkedCompaniesIDs,newResults.id)

tasks.py代码

@app.task(bind=True)
def runMonteCarloAsync(self,checkedCompaniesIDs, calc_id):
    newResults = MonteCarloResultTrue.objects.get(id=calc_id)
    newResults.htmlCompanyArray = "[asdf]"
    newResults.save()

当前settings.py的Celery配置

CELERY_accept_content = ['application/json']
CELERY_task_serializer = 'json'
CELERY_TASK_DEFAULT_QUEUE = 'django-queue-dev'

CELERY_BROKER_URL = 'sqs://{0}:{1}@'.format(
    urllib.parse.quote(AWS_ACCESS_KEY_ID, safe=''),
    urllib.parse.quote(AWS_SECRET_ACCESS_KEY, safe='')
)

CELERY_BROKER_TRANSPORT_OPTIONS = {
    "region": "us-east-1",
    'polling_interval': 20
}
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'

Procfile配置

web: python manage.py runserver
celery_worker: celery -A rvm.settings.celery.app worker --loglevel=INFO
celery_beat: celery

排查方向

  • 数据库连接加载问题:Celery Worker进程需要正确读取Django的数据库配置(AWS RDS连接信息),确保Worker启动时加载了正确的settings模块,无路径拼写错误。
  • 事务提交延迟:views.py中创建对象后,若Django事务未即时提交,Celery任务执行时可能无法读取到该对象。可尝试在创建对象后手动调用transaction.commit(),或调整事务配置。
  • Worker启动命令校验:检查Procfile中celery_worker的-A参数路径是否正确,确认rvm.settings.celery.app是Celery App的实际位置。
  • 数据库权限验证:确认Celery使用的AWS IAM角色或数据库用户拥有MonteCarloResultTrue表的UPDATE权限。
  • 日志排查:调高Celery Worker日志级别到DEBUG,查看是否存在数据库连接失败、对象找不到(get(id=calc_id)报错)或保存操作异常的日志信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:40:38