学习记录:python3 多线程 (threading ) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例
import threading
import time
def sub(num):
global count
lock.acquire() #上锁,第一个线程如果申请到锁,会在执行公共数据的过程中持续阻塞后续线程
#即后续第二个或其他线程依次来了发现已经被上锁,只能等待第一个线程释放锁
#当第一个线程将锁释放,后续的线程会进行争抢
'''线程的公共数据 下'''
print(num)
temp=count
time.sleep(0.001) #模拟大量的io操作
count=temp+1
'''线程的公共数据 上'''
lock.release() #释放锁
time.sleep(2)
# 释放信号量,可用信号量加一
threadmax.release()
start = time.time() #记录程序开始时间
threadmax = threading.BoundedSemaphore(4) #限制线程的最大数量为4个
count=0
lock=threading.Lock() #将锁内的代码串行化
l=[]
for i in range(100):
# 增加信号量,可用信号量减一
threadmax.acquire()
t=threading.Thread(target=sub,args=('123',))
t.start()
l.append(t)
for t in l:
t.join()
print(count)
end = time.time() #记录程序结束时间
print(end-start) #程序运行时长