我是靠谱客的博主 有魅力花卷,最近开发中收集的这篇文章主要介绍flask-sqlalchemy with_for_update 互斥锁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

业务中有个需求,就是可能会遇到并发读取某一行数据,然后修改这行数据,这时候就涉及到并发的锁了

比如:

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 互斥锁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部