Django运行事务提交为时已晚

时间:2019-11-13 20:57:17

标签: python django postgresql

import pickle
import os

big_data = os.urandom(10000000)

def run():
    pickle.loads(pickle.dumps(big_data))

t = timeit.Timer(run)
[threading.Thread(target=lambda: t.timeit(number=2000)).start() for _ in range(4)]

期望:完成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}) 块后,所有数据库修改都将提交给数据库。

现实:正在准备将响应发送到浏览器(序列化)时,异步任务已经开始执行。异步任务期望所有修改都已经完成,但是还没有完成。仅当浏览器收到对数据库的实际with响应时。

我了解commit钩子,但问题是为什么transaction.on_commit(func)完成后为什么不能确定数据库中的数据实际上已更新?记下with transaction.atomic()

关于Django 1.11.20和postgresql 10,我不知道它是否与Django 2+相同。

0 个答案:

没有答案