def produce(q): time.sleep(random.random()) q.put('car_by_{}'.format(os.getpid())) print("{} produces a car...".format(os.getpid())) def buy(q): car = q.get() if car is None: print("no car. {} ends.".format(os.getpid())) return else: time.sleep(random.random()) print("{} buy the car {}".format(os.getpid(), car)) if __name__=='__main__': q = Queue() procucers = [] consumers = [] for i in range(0, 3): p = Process(target=produce, args=(q,)) procucers.append(p) for i in range(0, 5): c = Process(target=buy, args=(q,)) c.daemon = True consumers.append(c) for p in procucers: p.start() for c in consumers: c.start() for p in procucers: p.join() for c in consumers: q.put(None)#主进程发信号结束,但要给每一个consumer准备 print('main')
时间: 2024-04-23 14:24:15 浏览: 113
这段代码是一个生产-消费者模型的多进程实现。其中,生产者使用 `produce` 函数向队列中放入一个字符串,代表生产了一辆汽车;消费者使用 `buy` 函数从队列中取出一个字符串,代表购买了一辆汽车。如果队列为空,则消费者会退出。主进程创建了三个生产者和五个消费者进程,分别启动它们,并等待所有生产者进程结束后,向队列中发送一个 `None` 字符串,代表生产结束,消费者在遇到 `None` 字符串后也会退出。最后,主进程会打印出 `'main'`。
阅读全文