我有以下设置:
get_conf()获得配置。save()方法,该方法告诉工作人员重新加载配置。我注意到,有时工作人员没有正确地接收更改的配置。特别是,当conf重新加载的时间比通常短时,工作人员从get_conf()获得了“旧”配置(丢失了最近的更改)。Django中使用的事务模型是默认的自动提交。
我想出了以下可能导致这种行为的可能方案:
save()返回,但MySQL / InnoDB仍在处理(自动)提交上述场景中的步骤2可行吗?也就是说,如果使用自动提交事务方法,django模型save()能否在DB中实际提交数据之前返回?或者,要往下走一层,MySQL自动提交INSERT或UPDATE操作是否可以在提交完成之前完成(其他事务可以看到更新/插入)?
发布于 2015-06-16 06:33:39
对象可能会变脏,请在保存后尝试刷新对象。
obj.save() obj.refresh_from_db()
参考资料:https://docs.djangoproject.com/en/1.8/ref/models/instances/#refreshing-objects-from-database
发布于 2015-10-19 14:15:49
这绝对是一种比赛条件。
如果只有一个脚本和一个数据库,您所描述的场景就永远不会发生。当您保存()时,该方法直到数据实际被提交到数据库时才返回。
但是,如果您使用的是主/从配置,则可能是复制延迟的受害者:如果您在主程序上写入,而在从服务器上读取,则完全可能您的脚本等待复制的时间不够长,并且您从从服务器读取旧的conf之后,它才有机会复制主服务器。
这样的配置可以使用数据库路由器在django中设置,也可以通过使用DB代理在DB端完成。看看那个。
https://stackoverflow.com/questions/30215760
复制相似问题