进程间通信--标准库模块multiprocessing(五-信号量-Semaphore)

1、信号量

  给定一定的数量的信号量,对多个进程可见,并且多个进程根据信号量多少确定不同的行为

2、sem = Semaphore(num)

  功能 : 创建信号量对象

  参数 : 信号量的初始值

  返回 : 信号量对象

3、sem.acquire()

  将信号量数量减1 ,当数量为0则阻塞

4、sem.release()

  将信号量数量加1

5、sem.get_value()

  获取当前信号量的值

from multiprocessing import Semaphore,Process
from time import sleep
import os
import random

#创建信号量对象 初始为3
sem = Semaphore(3)

def fun():
    print("进程 %d 等待信号量"%os.getpid())
    #消耗一个信号量
    sem.acquire()
    print("进程 %d 消耗了1个信号量"%os.getpid())
    sleep(random.randint(2,5))
    sem.release()
    print("进程 %d 添加了1个信号量"%os.getpid())

jobs = []

for i in range(4):
    p = Process(target = fun)
    jobs.append(p)
    p.start()

for i in jobs:
    i.join()

#结果
进程 4268 等待信号量
进程 4268 消耗了1个信号量
进程 4269 等待信号量
进程 4269 消耗了1个信号量
进程 4270 等待信号量
进程 4270 消耗了1个信号量
进程 4271 等待信号量
进程 4268 添加了1个信号量
进程 4271 消耗了1个信号量
进程 4270 添加了1个信号量
进程 4271 添加了1个信号量
进程 4269 添加了1个信号量

 

上一篇:信号量的实现和应用


下一篇:Semaphore--控制并发线程数