10、第七 - 网络编程基础 - 递归锁--threading.RLock()
Python 中的递归锁,其实就是大锁里面包含了小的锁。Python中为了支持在同一线程中多次请求同一资源,python提供了可重入锁RLock
举例说明 --(可以尝试把 threading.RLock() 改为 threading.Lock() 进行验证 )如下:
import threading,time
def run1():
print ("grab the first part data")
lock.acquire()
global num1
num1 += 1
lock.release()
return num1
def run2():
print ("grab the second part data")
lock.acquire()
global num2
num2 += 1
lock.release()
return num2
def run3():
lock.acquire()
res1 = run1()
print ("---between run1 and run2 ")
res2 = run2()
lock.release()
print(res1,res2)
if __name__ == "__main__":
num1,num2 = 0,0
lock = threading.RLock() #改成互斥锁,threading.Lock()进程会进入死循环,产生死锁
for i in range(5):
t = threading.Thread(target=run3)
t.start()
while threading.active_count() != 1:
print(threading.active_count())
else:
print("--all threads done--")
print(num1,num2)
输出:
grab the first part data
---between run1 and run2
grab the second part data
1 1
grab the first part data
---between run1 and run2
grab the second part data
2 2
grab the first part data
---between run1 and run2
grab the second part data
3 3
grab the first part data
---between run1 and run2
grab the second part data
4 4
grab the first part data
---between run1 and run2
grab the second part data
5 5
--all threads done--
5 5
注:run3 有自己的锁,调用了run1与run2 ,其中run1 与run2有自己的锁,就是所中有锁。
人有傲骨终不贱,脚踏实地见真章;
超出预期为工作,价值体现显能力。
浙公网安备 33010602011771号