# 场景: # 4个ktv房间 # 10 个人 轮流去唱歌 import random import time from multiprocessing import Semaphore,Process,Queue def ktv_sing(person,sem,queue): sem.acquire() # 相当于获得锁的一把钥匙,然后打开锁 执行 锁住的代码,执行完毕后,锁住代码,归还钥匙 roomNum = queue.get() print(f'\033[31m{person}走进ktv{roomNum}房间\033[m',time.strftime("%Y-%m-%d %H:%M:%S")) time.sleep(random.randint(1,5)) print(f'\033[32m{person}走出ktv{roomNum}房间\033[m',time.strftime("%Y-%m-%d %H:%M:%S")) queue.put(roomNum) sem.release() # 执行完锁住的代码,归还钥匙 if __name__ == '__main__': queue = Queue(4) # 通过队列实现进程间通信, for i in range(1,5): # 将四个房间号放入队列中去 queue.put(i) sem = Semaphore(4) # 信号量类,就是创建一个有多把钥匙的钥 for i in range(1,11): p = Process(target=ktv_sing,args=("person%s" % i,sem,queue)) p.start() # 程序执行结果: # person2走进ktv1房间 2018-09-19 17:27:20 # person4走进ktv2房间 2018-09-19 17:27:20 # person1走进ktv3房间 2018-09-19 17:27:20 # person3走进ktv4房间 2018-09-19 17:27:20 # person4走出ktv2房间 2018-09-19 17:27:23 # person1走出ktv3房间 2018-09-19 17:27:23 # person5走进ktv2房间 2018-09-19 17:27:23 # person6走进ktv3房间 2018-09-19 17:27:23 # person5走出ktv2房间 2018-09-19 17:27:24 # person7走进ktv2房间 2018-09-19 17:27:24 # person3走出ktv4房间 2018-09-19 17:27:24 # person8走进ktv4房间 2018-09-19 17:27:24 # person2走出ktv1房间 2018-09-19 17:27:25 # person9走进ktv1房间 2018-09-19 17:27:25 # person8走出ktv4房间 2018-09-19 17:27:25 # person10走进ktv4房间 2018-09-19 17:27:25 # person9走出ktv1房间 2018-09-19 17:27:28 # person6走出ktv3房间 2018-09-19 17:27:28 # person10走出ktv4房间 2018-09-19 17:27:28 # person7走出ktv2房间 2018-09-19 17:27:29 # def acquire(self, blocking=True, timeout=None): # pas
浙公网安备 33010602011771号