一 .线程信号量(Semaphore)
号量semaphore 可以控制同时运行执行的线程数量。
信号量semaphore内部维护了一个条件变量和一个计数器。
import threading,time
sem=threading.Semaphore(3) # 控制线程的数量 意思三个三个线程走
def run():
with sem:
for i in range(10):
print(threading.current_thread().name,i)
time.sleep(2)
if __name__=="__main__":
for i in range(5):
threading.Thread(target=run).start()
from threading import Thread,Semaphore
import time,os
def run(i,sem):
for i in range(5):
sem.acquire() 表示三个人拿到钥匙了方问
print(os.getpid(),"哈哈哈哈哈哈")
time.sleep(1)
sem.release() 表示三个人用完钥匙还钥匙 (依次轮流)
sem=Semaphore(3) # 表示控制线程在同一个时间内只能三个 ,三个线程访问
for i in range(10):
p=Thread(target=run,args=(i,sem))
p.start()