python Lock.acquire(0)的作用
python Lock.acquire(0)的作用
threading模块中的Lock为常用对象,其加锁方法acquire()有两个参数: blocking 和 timeout。blocking参数默认为True,即堵塞模式,常用acquire(1)表示。这时意味着如果是第一个线程,则加锁。如果是后面的线程,则堵塞,直到前面的线程释放锁后加锁。
如果blocking参数为False,即acquire(0)哪?说明里是说其设置为False,则如果其他线程已经获取了锁,它将不会阻塞线程,并且将返回False。 其默认值为True。
我们经常用的是acquire(1)。acquire(0)怎么使用?
经过验证,acquire(0)如果是第一个获取锁的线程,则直接加锁,返回True。如果其他线程已加锁,则返回False,同时非堵塞。这个可用于检测是否资源已加锁,根据返回的情况做不同处理。比如可再次acquire(1),进行堵塞,此时不会死锁。
如下面代码:
from threading import Lock, Thread
from time import sleep
def myget(name):
print(‘myget: ‘, name)
lock.acquire()
sleep(2)
print(’________________________’)
lock.release()
print(‘myget: over’)
def myset(name):
print(‘myset: ‘, name)
if lock.acquire(0):
sleep(3)
print(’________________________’)
lock.release()
else:
lock.acquire(1)
print(‘unblocked’)
lock.release()
print(‘myset: over’)
if name == ‘main’:
names = [‘alpha’, ‘beta’]
lock = Lock()
thread_a = Thread(target=myget, args=(names[0],))
thread_b = Thread(target=myset, args=(names[1],))
thread_a.start()
thread_b.start()thread_a.join()
print('<<<<<<<<<<<')
print(lock.locked())
thread_b.join()
运行结果为:
D:\Programs\Python\Python38-32\python.exe E:/PycharmProjects/cp/src/ch04/test_lockdead.py
myget: alpha
myset: beta
myget: over
<<<<<<<<<<<
False
unblocked
myset: over
Process finished with exit code 0
python Lock.acquire(0)的作用相关推荐
- Python中双冒号的作用[::]
Python中双冒号的作用[::] Python sequence slice addresses can be written as a[start:end:step] and any of sta ...
- NET面试题:C#中的lock关键字有何作用
NET面试题:C#中的lock关键字有何作用 2011-03-01 08:42:04 标签:.net面试题 .net电子书 .net教学视频 .net 更多.net面试题,.net电子书,.net教学 ...
- python中格式化字符串的作用_python中字符串格式化的意义(化妆)
格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...
- 计算机语言中str是什么意思,python中str函数的作用是什么
python中str函数的作用是什么 发布时间:2021-04-27 16:12:24 来源:亿速云 阅读:56 作者:Leah python中str函数的作用是什么?相信很多没有经验的人对此束手无策 ...
- python中pass语句的作用是什么_简述 Python 中 pass 语句的作用。
[单选题]从总体中抽取的样本数据的频率分布直方图如图所示,若总体中85%的数据不超过b,则b的估计值为( ) [单选题]Graphically, competitive market supply i ...
- 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算
目录 使用软件以及运行环境 对于环境的搭建 代码思路 需要导入的包 模拟登录 爬取数据 绩点计算器 功能一 功能二 完整代码 使用软件以及运行环境 win10系统,Vs Code软件,Python 3 ...
- python语句中end=‘ ‘的作用
python语句中end=' '的作用 print默认是打印一行,结尾加换行.end=' '意思是末尾不换行,加空格.空格数取决于引号里面的空格数 如下举例说明: 不加end="" ...
- python数据分析软件0代码,python数据分析软件开发
大家好,小编为大家解答python数据分析软件0代码的问题.很多人还不知道python数据分析处理软件,现在让我们一起来看看吧! 1.sas和python的区别 sas和python的区别: 1.成本 ...
- python中的双冒号作用
Python序列切片地址可以写为[开始:结束:步长],其中的开始和结束可以省略. 1. range(n)生成[0,n)区间整数 2. 开始start省略时,默认从第0项开始 3. 结尾省略的时候,默认 ...
最新文章
- 工作67:el-table问题
- ionic4 引入外部字体ttf
- MySQL 索引失效案例
- 廖雪峰python学习笔记之访问数据库
- vs2010断点调试详细教程
- 音视频编解码常用知识点
- selenium对Alert弹框的多种处理
- Applet 小应用程序查看器 乱码(小方块)
- 菌群多样性是如何形成的,与健康的关系,如何改善?
- 三、自定义Abp Vnext框架代码生成模板
- wwwxxx域名选择(www.xxx.com或者.cn)
- gitlab:不能中文搜索
- 基于linux智能家居系统设计,基于Linux的智能家居系统设计与实现
- JAVA分布式医疗云平台系统开发实战第一节 open-his系统介绍
- HTML Tab 选项卡
- C: error: incompatible types when initializing type ‘int’ using type ‘atomic_t’ {aka ‘struct <anonym
- 记一次Redis被攻击的事件
- Unity3D横版过关游戏(一)
- 在线音乐进入“人本主义”争夺时代
- 电脑断开,电脑怎么断开网络连接