from multiprocessing import Process, Lock, Semaphore, Queue
import time
from random import random
buffer = Queue(10)
empty = Semaphore(2) # 信号量
full = Semaphore(0)
lock = Lock()
class Consumer(Process): # 继承Process
# 消费者消费full中的产品
def run(self):
global buffer, empty, full, lock
while True:
# acquire方法 消耗资源加1
# release方法 释放资源加1
full.acquire()
lock.acquire()
print("Consumer get ", buffer.get())
time.sleep(1)
lock.release()
empty.release()
class Producer(Process): # 继承Process
# 生产者往full中生产
def run(self):
global buffer, empty, full, lock
while True:
empty.acquire()
lock.acquire()
num = random()
buffer.put(num)
print("Producer put ", num)
time.sleep(1)
lock.release()
full.release()
if __name__ == "__main__":
p = Producer()
c = Consumer()
p.daemon = True
c.daemon = True # 当父进程结束后,子进程自动终止
p.start()
c.start()
p.join() # 子进程调用join()方法 父进程等待子进程执行完毕
c.join()
print("Ended!")
不知道为什么Consumer类运行不出来