python多线程锁的使用,python线程死锁的原因及解决方法
python _dominic_80-ChinaUnix博客的线程锁机制
python的线程锁定机制
标签:
Python线程锁
分类:PYTHON
螺纹和锁
请求锁-进入锁池并等待-获取锁-锁定-释放锁。
锁
锁定()
Lock(指令锁定)是可用的最低同步指令。当锁被锁定时,它不属于特定的线程。Lock包含两种状态,——锁定和解锁,以及两种基本方法。
可以认为Lock有一个锁池。当线程请求锁时,它将线程放入池中,直到它获得锁,然后离开池。在状态图中,池中的线程处于同步阻塞状态。
施工方法:
锁定()
示例方法:
Acquire([timeout]):将线程置于同步阻塞状态,并尝试获取锁。
Release():释放锁。线程必须在使用前被锁定,否则将引发异常。
示例程序:
#!/usr/bin/env python
导入线程导入timedata=0lock=threading。Lock()def fun():全局数据打印“%s acquire lock .”% threading.currentThread()。getName() If.acquire (): #等待锁被获取。如果采集成功,开始锁定并操作打印“% s get the lock”% threading.currentthread()。getname()data=1 Print data time . sleep(1)Print“% s release lock .”% threading.currentthread()。getname()lock . release()# release lock t1=threading . thread(target=fun)T2=threading . thread(target=fun)T3=threading。线程(target=fun)t1 . start()T2 . start()T3 . start()
在上面的代码中,只有当线程t1的锁被释放时,线程t2才能被锁定。同样,当t2锁被释放时,t3可以锁定,但t2和t3会在t1时一起进入等待锁获取的状态。
重新锁定
RLock()
RLock(可重入锁)是一个同步指令,可以被同一个线程多次请求。RLock使用了“拥有线程”和“递归层次”的概念。当它被锁定时,RLock由一个线程拥有。带有RLock的线程可以再次调用acquire(),释放锁时需要调用release()相同的次数。
可以认为RLock包含一个锁池和一个初始值为0的计数器。每次成功调用acquire()/release()时,计数器会为1/-1,为0时,锁被解锁。
施工方法:
RLock()
示例方法:
acquire([超时])/release():类似于Lock。
示例程序:
#!/usr/bin/env python
导入线程导入timedata=0lock=threading。RLock()def fun():全局数据打印“%s获取锁.”% threading.currentThread()。getName() If.acquire (): #等待锁被获取。如果采集成功,开始锁定并操作打印“% s get the lock”% threading.currentthread()。getname()data=1 Print data time . sleep(2)Print“% s”再次获取锁。% threading.currentthread()。getname () iflock.acquire (): #再次获取合并。如果采集成功,开始锁定并操作data=1 printdatatime . sleep(2)print“% s release lock .”% threading.currentthread()。getname()lock . release()# release lock time . sleep(1)Print“% s release lock again .”% threading.currentthread()。getname () lock.release () #释放锁t1=线程。线程(target=fun) t2=线程。线程(target=fun)t3=线程。线程(target=fun)t1 . start()T2 . start()T3 . start()
在上面的代码中,只有当线程t1两次请求的锁被释放时,线程t2才能锁定。同样,t2两次请求的锁释放后,t3才能锁,但t2和t3会和t1一起进入等量锁获取状态。
推荐博客文章Python常用算法运算(3) (2小时前)节俭分析小工具nginx lua扩展使用(4) (2小时前)重庆著名律师阐述报应刑法与预防刑法(3小时前)上海律师法律咨询讲述交通事故赔偿时应注意的方面(3小时前)Perl钻石运算符输入(5小时前)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。