概述
业务中有个需求,就是可能会遇到并发读取某一行数据,然后修改这行数据,这时候就涉及到并发的锁了
比如:
address表有个user_id=3的字段的status如果为0则要update,为1则不需要,如果没有锁,当两个session同时访问到user_id为3的字段时,此时status都为0,那么两个session都会对数据库做一次update,这等于update了两次,那么怎么避免这种情况呢?就要用到with_for_update()方法了:
下面是session1的代码
session1:
addr = Address.query.filter_by(user_id=3).with_for_update().first
if addr.status == 0:
addr.status = 1
db.session.commit()
下面是session2的代码:
session2:
addr = Address.query.filter_by(user_id=3).with_for_update().first
if addr.status == 0:
addr.status = 1
db.session.commit()
那么当session1抢先拿到锁的时候,在执行到最后的commit之前,session2都会卡住,当session1释放锁,session2拿到锁之后,status已经改为1了.
最后
以上就是有魅力花卷为你收集整理的flask-sqlalchemy with_for_update 互斥锁的全部内容,希望文章能够帮你解决flask-sqlalchemy with_for_update 互斥锁所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复