繁体   English   中英

Django Celery:芹菜的任务中不存在模型对象(ATOMIC_REQUESTS=False)

[英]Django Celery: Model object does not exists within the celery's task (ATOMIC_REQUESTS=False)

我得到MyModel matching query does not exist. 在进入 celery 任务之前获取我正在创建的对象时出错。 我正在从我的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 甚至在数据实际保存到数据库之前就从模型对象中释放了控制权。 这是一个间歇性问题,有时会发生,有时它工作正常。

早些时候我遇到了类似的问题,我正在更新模型对象的值,但更新的值没有反映在芹菜的任务中。 为了运行,我增加了 10 秒的延迟。 但这次我正在寻找一些永久的解决方案。 有没有办法解决这个问题? 我在 Django 或 Celery 的配置中都没有任何配置参数来处理这种行为。

问题是因为我使用的是TransactionMiddleware ,它与@transaction.commit_on_success装饰器做类似的事情。 如果你想继续使用TransactionMiddleware ,你应该考虑在你的视图中使用@transaction.autocommit装饰器和 celery 任务,或者@transaction.commit_manually

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM