1. 程式人生 > 實用技巧 >程序間通訊--標準庫模組multiprocessing(五-訊號量-Semaphore)

程序間通訊--標準庫模組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個訊號量