python 进程信号量

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走出来房间
"""
原文地址:https://www.cnblogs.com/wt7018/p/11055247.html