python3 多线程 (threading) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例
学习记录: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) #程序运行时长