【发布时间】:2016-10-14 09:39:42
【问题描述】:
在进入 celery 任务之前获取我正在创建的对象时出现MyModel matching query does not exist. 错误。我正在我的APIView 中调用该任务。
my_model_obj = MyModel(x=1, y=2)
my_model_obj.save()
my_celery_task.delay(my_model_obj.id)
在我的任务功能中,我正在做:
@task()
def my_celery_task(my_model_id):
MyModel.objects.get(id=my_model_id)
我的 Django 的 DATABASE 配置中没有 ATOMIC_REQUESTS 参数。所以,默认情况下它应该是 False。
我相信这是因为 Django 甚至在数据实际保存到数据库之前就释放了模型对象的控制权。这是一个间歇性问题,有时会发生,有时会正常工作。
之前我遇到过类似的问题,我正在更新模型对象的值,但更新后的值并未反映在 celery 的任务中。为了运行,我增加了 10 秒的延迟。但这次我正在寻找一些永久的解决方案。有没有办法解决这个问题?我在 Django 或 Celery 的配置中都没有任何配置参数来处理这种行为。
【问题讨论】:
标签: python django django-orm django-celery celery-task