[英]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.