最新要闻
- 天气预报|未来三天局地阵雨“打酱油” 17日全市最高气温或达40℃
- 封神票房破20亿 即将回本赚钱 后两部特效经费有了!
- A股半年报盘点丨369家公司已披露 23家公司净利润超10亿
- 94股获券商买入评级,良信股份目标涨幅达59.01%
- 注意绕行!锡林浩特这些路段即将施工!
- 事关蔬菜稳产保供,农业农村部紧急通知→
- 矫正视力是什么意思5.0 矫正视力是什么意思
- 电瓶车也在搞无人驾驶 你说厂商们这是图啥?
- 汽车越来越贵 10万以下车型早已不是主流 30万以上份额暴涨
- 小爱同学新版即将公布:或将得到自研AI模型助力
- RX 6900 XT坏了:钻个孔 修好了!
- 事发突然!他跳进海水中!
- 安徽省怀远县市场监管局全力推进“个转企”落地见效
- 饮料、方便面、西瓜频繁丢失,民警查获5名涉盗窃人员
- 恒工精密等2只新股今日申购
- 猪胃的功效与作用
手机
![无惧汗水,尽情热爱!甄稀冰淇淋联手十足便利店助力杭州亚运征途](http://img.dcgqt.com/2022/0610/20220610013459914.jpg)
无惧汗水,尽情热爱!甄稀冰淇淋联手十足便利店助力杭州亚运征途
![激战2新DLC即将上线,海外如何玩激战2国服?](http://www.dianxian.net/uploadfile2022/0610/20220610022121172.jpg)
激战2新DLC即将上线,海外如何玩激战2国服?
- 无惧汗水,尽情热爱!甄稀冰淇淋联手十足便利店助力杭州亚运征途
- 激战2新DLC即将上线,海外如何玩激战2国服?
- 世界有多少国家/地区实施碳交易市场/碳税?
- ChatGPT自定义指令功能已向所有用户开放
- 揭示细菌对抗生素Albicidin产生耐药性的机制
- 舞蹈家王亚彬:不愿重复大家熟悉的西游故事
家电
Python中threading模块 lock、Rlock的使用
一、概述
在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock 、Rlock 、Semaphore 、Event 、Condition 用来保证线程之间的同步,后者保证访问共享变量的互斥问题。
- Lock & RLock:互斥锁,用来保证多线程访问共享变量的问题
- Semaphore对象:Lock互斥锁的加强版,可以被多个线程同时拥有,而Lock只能被某一个线程同时拥有。
- Event对象:它是线程间通信的方式,相当于信号,一个线程可以给另外一个线程发送信号后让其执行操作。
- Condition对象:其可以在某些事件触发或者达到特定的条件后才处理数据
1、Lock(互斥锁)
请求锁定 — 进入锁定池等待 — — 获取锁 — 已锁定— — 释放锁
Lock(指令锁)是可用的最低级的同步指令。Lock处于锁定状态时,不被特定的线程拥有。Lock包含两种状态——锁定和非锁定,以及两个基本的方法。可以认为Lock有一个锁定池,当线程请求锁定时,将线程至于池中,直到获得锁定后出池。池中的线程处于状态图中的同步阻塞状态。
【资料图】
构造方法:mylock = Threading.Lock( )
实例方法:
- acquire([timeout]): 使线程进入同步阻塞状态,尝试获得锁定。
- release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。
实例一(未使用锁):
import threadingimport timenum = 0def show(arg): global num time.sleep(1) num +=1 print("bb :{}".format(num))for i in range(5): t = threading.Thread(target=show, args=(i,)) # 注意传入参数后一定要有【,】逗号 t.start()print("main thread stop")--------------------------------------------------------------------------main thread stopbb :1bb :2bb :3bb :4bb :5
实例二(使用锁)
import threadingimport timenum = 0lock = threading.RLock()# 调用acquire([timeout])时,线程将一直阻塞,# 直到获得锁定或者直到timeout秒后(timeout参数可选)。# 返回是否获得锁。def Func(): lock.acquire() global num num += 1 time.sleep(1) print(num) lock.release()for i in range(10): t = threading.Thread(target=Func) t.start()------------------------------------------------------------------12345678910#可以看出,全局变量在在每次被调用时都要获得锁,才能操作,因此保证了共享数据的安全性
对于Lock对象而言,如果一个线程连续两次release,使得线程死锁。所以Lock不常用,一般采用Rlock进行线程锁的设定。
import threadingimport timeclass MyThread(threading.Thread): def run(self): global num time.sleep(1) if lock.acquire(1): num = num+1 msg = self.name+" set num to "+str(num) print(msg) lock.acquire() lock.release() lock.release()num = 0lock = threading.Lock()def test(): for i in range(5): t = MyThread() t.start()if __name__ == "__main__": test()------------------------------------------------------Thread-12 set num to 1
2、RLock(可重入锁)
RLock(可重入锁)是一个可以被同一个线程请求多次的同步指令。RLock使用了“拥有的线程”和“递归等级”的概念,处于锁定状态时,RLock被某个线程拥有。拥有RLock的线程可以再次调用acquire(),释放锁时需要调用release()相同次数。可以认为RLock包含一个锁定池和一个初始值为0的计数器,每次成功调用 acquire()/release(),计数器将+1/-1,为0时锁处于未锁定状态。
构造方法:mylock = Threading.RLock()
实例方法:acquire([timeout])/release(): 跟Lock差不多。
实例解决死锁,调用相同次数的acquire和release,保证成对出现
import threadingrLock = threading.RLock() #RLock对象rLock.acquire()rLock.acquire() #在同一线程内,程序不会堵塞。rLock.release()rLock.release()print(rLock.acquire())
详细实例:
import threadingmylock = threading.RLock()num = 0class WorkThread(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.t_name = name def run(self): global num while True: mylock.acquire() print("\n%s locked, number: %d" % (self.t_name, num)) if num >= 2: mylock.release() print("\n%s released, number: %d" % (self.t_name, num)) break num += 1 print("\n%s released, number: %d" % (self.t_name, num)) mylock.release()def test(): #Python小白学习交流群:711312441 thread1 = WorkThread("A-Worker") thread2 = WorkThread("B-Worker") thread1.start() thread2.start()if __name__ == "__main__": test() --------------------------------------------------A-Worker locked, number: 0A-Worker released, number: 1A-Worker locked, number: 1A-Worker released, number: 2A-Worker locked, number: 2A-Worker released, number: 2B-Worker locked, number: 2B-Worker released, number: 2
关键词:
-
-
-
-
Python中threading模块 lock、Rlock的使用
天气预报|未来三天局地阵雨“打酱油” 17日全市最高气温或达40℃
新能源汽车崩了!降价风暴又至,“卷王”特斯拉也跟上,新一轮“厮杀”已开启?
史克兢带队绥德督导检查夏季治安巡查宣防建集中统一行动
平顶山卫东区:招商引资按下“快进键”
2023年大连灵活就业人员社保缴费多少钱一个月
格科微:副总裁暨核心技术人员离职
阿里巴巴北京总部园区项目预计10月份完工
中汽协:7月新能源汽车产销分别完成80.5万辆和78万辆 同比分别增长30.6%和31.6%
西宁:多子女家庭租房提取住房公积金限额将提高
艺术欣赏|陈可之油画《一天之计在于晨》
无惧汗水,尽情热爱!甄稀冰淇淋联手十足便利店助力杭州亚运征途
组织管理如何创造价值
为什么车牌那么容易被水冲走(为啥车牌容易被水冲掉?)
激战2新DLC即将上线,海外如何玩激战2国服?
贵州省黔东南苗族侗族自治州雷山县2023-08-14 14:14发布暴雨黄色预警
心慌烦躁是怎么回事(心慌烦躁不安怎么回事)
吉林省人民政府防汛抗旱指挥部终止省防汛防台风二级应急响应
江西“百城联动”汽车消费季活动在抚州启动
马英九慰安妇铜像前痛批蔡英文:对慰安妇无情无义 让人愤怒
中国电信客服就“双倍扣费”致歉:系统升级致河北部分用户余额显示异常,正紧急处理
世界有多少国家/地区实施碳交易市场/碳税?
索菲亚:8月11日融资买入444.44万元,融资融券余额1.63亿元
姚妙:“下半年,我的小目标是UTMB参赛组别前三,大目标是马拉松跑进2:30”
辉隆股份:8月11日融券净卖出8.19万股,连续3日累计净卖出15.97万股
凯美特气:8月11日融资买入504.46万元,融资融券余额2.33亿元
Nothing Phone2首次公开销售查看价格规格和优惠
国网信通(600131)8月14日主力资金净卖出879.65万元
永鼎股份(600105)8月14日主力资金净卖出172.30万元
【财经分析】预制菜产业“乘风破浪” 亟待建立标准体系提升品牌
优化环境、创新产品、打造平台——各地加快推动形成绿色生活方式观察
广西举行“全民健身日”系列活动
“挡脸”身份证保护套火了,违法不?民警这样说
手球——第一届学青会女子公开组比赛开赛
红豆糯米糕怎么做 红豆糯米糕怎么做图文
剑与远征演武试炼活动什么时候开始(剑与远征演武场)
西安山洪泥石流灾害已发现21名遇难者,仍有6人失联
一道长通新能源·2023威宁草海高原半程马拉松鸣枪开跑
巴萨0-0争议不断!阿劳霍双手接球没黄牌,补时造点球主裁不判
奥特曼:雷格罗斯有2个bug,不听命于奥特之王,有望成为新四奥
【新时代的贵州人】王海军:带领团队解决航天材料的瓶颈问题
鸿蒙4里的大模型,能否撑起华为的野心?
金融数据短期波动 货币政策有望加力
DevOps再进化 VMware借力平台工程加速应用现代化
ChatGPT自定义指令功能已向所有用户开放
霞客行之江山多娇:大理古城
植物营养概念股名单(2023/8/14)
郭明錤:无需担心OpenAI破产 AI/AIGC已是明确趋势
突然双倍扣费?中国电信客服致歉:系统升级致部分用户余额异常正处理 具体是什么情况?
封神票房破20亿 即将回本赚钱 后两部特效经费有了!
泰康福寿百岁2023养老年金保险怎么样?是真的吗?
深入学习贯彻习近平法治思想|河南鹤壁淇滨:依法能动履职为辛村遗址筑起“防护墙”
易方达等公司今日发行上证科创板成长ETF
车评头条:第二代逸动XT:更智能的时尚掀背车
黑龙江:锚定高质量发展 向产业振兴发力
大连到烟台轮船哪个好(大连到烟台轮船时刻表)
A股半年报盘点丨369家公司已披露 23家公司净利润超10亿
居民自治凝聚力量,他们在美好社区里共忆乡愁
创作中的摄影师
村BA的品牌化之路
茂名最大商业综合体化州万达广场已于8月10日开业
94股获券商买入评级,良信股份目标涨幅达59.01%
上海前滩31拟于今年10月底全业态开幕 涉及演艺、商业、办公、酒店四大业态
注意绕行!锡林浩特这些路段即将施工!
日经225指数开盘微跌0.03%,韩国综合指数跌0.25%
事关蔬菜稳产保供,农业农村部紧急通知→
最高降6万,新一轮“汽车降价潮”!特斯拉、蔚来等10家车企参与
Bossjob开启全球化“抢人抢岗”
如何删除淘宝登录记录(如何删除淘宝登录过的登录名和登录密码)
认知策略与元认知策略的区别 认知策略
销售毛利是指什么 销售毛利是什么意思
“村超”有了新玩法!贵州榕江美食足球友谊赛开赛
船舶701所待遇 请问一下船舶研究所701所702所708所哪个更好一点呢具体一点
洛克王国玛雅怎么获得(洛克王国玛雅怎么抓)
机动战士钢弹桑(04)(对于机动战士钢弹桑(04)简单介绍)
揭示细菌对抗生素Albicidin产生耐药性的机制
星形线的图像 星形线推导
约32亿!运达股份与临汾市政府签订合作框架协议
舞蹈家王亚彬:不愿重复大家熟悉的西游故事
生成式AI成“救星”?全球首款ChatGPT音箱来了!
卧龙地产:矿产金属类贸易业务产品主要为铜精矿 有稀土类但占比不高
cad怎么路径阵列(cad阵列怎么用)
《博德之门3》药水一览
自动驾驶上市公司股票龙头有哪些?(2023/8/14)
金龙鱼中报:净利润下滑,但现金流量大幅增长【BT财报快闪】
*ST同达(600647):8月14日技术指标出现看涨信号-“红三兵”
光格科技(688450):该股换手率大于8%(08-14)
美国篮球国家队梦之一队比赛视频_美国篮球国家队
矫正视力是什么意思5.0 矫正视力是什么意思
其实都没有歌词的寓意 其实都没有歌词
闪电解码 | 文化“两创”看山东 好戏连台来济宁
零跑B11将亮相慕尼黑 多款新车将基于四叶草架构
玉米:东南沿海报价提升 关注新季产量变动
入选全国热门Citywalk城市Top6!一起来贵阳“压马路” 登高望远
新能源车主难受!我国多地充电站突破2元1度:充一次多花10多块
电瓶车也在搞无人驾驶 你说厂商们这是图啥?
汽车越来越贵 10万以下车型早已不是主流 30万以上份额暴涨
小爱同学新版即将公布:或将得到自研AI模型助力
RX 6900 XT坏了:钻个孔 修好了!
新船订单跟踪(8.7―8.13)