python 线程锁

import threading,time

def run(n):
lock.acquire()#获取锁
global number
number +=1
lock.release()#释放锁
time.sleep(1)#加在释放前会要50秒
lock = threading.Lock()#实例
number =0
time_now = time.time()
re_date =[]
for i in range(50):
t1 = threading.Thread(target=run,args=(i,))#生成一个线程实例
t1.start()#启动线程
re_date.append(t1)
for t in re_date:
t.join()#等于wait()一个线程执行完之后才执行另一个线程

print('done...')
print("number:",number)
print(time.time()-time_now)#50个线程总共花了多少时间



注释:
acquire:获取锁,阻止或非阻止如果blocking为True,则当前线程会堵塞,直到获取到这个锁为止(如果没有指定,则默认为True)。如果blocking为False,则当前线程不会阻塞。
在浮点型timeout参数设置为正值的情况下调用时,只要无法获取锁,将最多阻塞timeout指定的秒数。timeout参数被设置为-1时将无限的等待。当blocking为False时,timeout指定的值
将被忽略。如果成功获取锁,则返回Ture,否则返回False(例如,超时到期)
release()释放一个锁,这可以从任何线程调用,而不仅仅是已获得锁的线程。当锁被锁定时,将其重置为解锁状态并返回。如果阻止任何其他线程等待锁解锁,则只允许其中一个继续执行。在unlocked
锁上调用时,会引发RuntimeError异常
原文地址:https://www.cnblogs.com/anhao-world/p/13669808.html