Python Django运行事务提交太晚
期望值:当Python Django运行事务提交太晚,python,django,postgresql,Python,Django,Postgresql,期望值:当with块完成时,所有数据库修改都提交到数据库 现实情况:在准备将响应发送到浏览器(序列化)时,异步任务已开始执行。异步任务要求所有修改都已完成,但尚未完成。仅当浏览器收到响应时,才完成对数据库的实际提交 我知道transaction.on_commit(func)hook,但问题是为什么一旦with transaction.atomic()完成,我就不能确定数据库中的数据是否确实更新了?记下ATOMIC\u REQUESTS=False 它是关于Django 1.11.20和post
with
块完成时,所有数据库修改都提交到数据库
现实情况:在准备将响应发送到浏览器(序列化)时,异步任务已开始执行。异步任务要求所有修改都已完成,但尚未完成。仅当浏览器收到响应时,才完成对数据库的实际提交
我知道transaction.on_commit(func)
hook,但问题是为什么一旦with transaction.atomic()
完成,我就不能确定数据库中的数据是否确实更新了?记下ATOMIC\u REQUESTS=False
它是关于Django 1.11.20和postgresql 10的。我不知道它是否与Django 2+事务相同。atomic`不保证事务运行的时间,它只保证
with
块中的DB操作是原子的。您的期望是正确的。这意味着这里还有其他一些问题,不幸的是,不能从您发布的最小伪代码中确定。
def some_view(request):
with transaction.atomic():
data = do_some_stuff(request)
data2 = do_some_stuff2(request)
async_task.delay(data, data2)
return Response({'data': data, 'data2': data2})