首页 > 编程语言 > 详细

python 信号量

时间:2019-06-19 22:46:59      阅读:103      评论:0      收藏:0      [点我收藏+]

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走出来房间
"""

 

python 信号量

原文:https://www.cnblogs.com/wt7018/p/11055247.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!