1、概念
信号量和锁相似,锁同一时间只允许一个对象(进程)通过,信号量同一时间允许多个对象(进程)通过
2、应用场景
多线程,并规定数量
3、格式:
导入信号量模块
实例化信号量对象,可以规定信号量的个数
传递对象
拿到一把钥匙
释放一把钥匙
4、过程
获得钥匙,当钥匙串没钥匙时,其它进程要在外面等候,当释放一把钥匙时,一个进程进入
""" 一个房间一次只允许两个人通过 若不使用信号量,会造成所有人都进入这个房子 若只允许一人通过可以用锁-Lock() """ import time import random from multiprocessing import Process from multiprocessing import Semaphore def home(name, se): se.acquire() # 拿到一把钥匙 print('%s进入了房间' % name) time.sleep(random.randint(1, 5)) print('******************%s走出来房间' % name) se.release() # 还回一把钥匙 if __name__ == '__main__': se = Semaphore(2) # 创建信号量的对象,有两把钥匙 for i in range(7): p = Process(target=home, args=('tom{}'.format(i), se)) p.start() """ 结果: tom0进入了房间 tom1进入了房间 ******************tom0走出来房间 tom2进入了房间 ******************tom1走出来房间 tom3进入了房间 ******************tom2走出来房间 tom4进入了房间 ******************tom3走出来房间 tom5进入了房间 ******************tom4走出来房间 tom6进入了房间 ******************tom5走出来房间 ******************tom6走出来房间 """