多线程:生产者消费者模型

from threading import Thread, Condition
from queue import Queue
import random
import time

condition = Condition()
products = Queue(5)

class Producer(Thread):
    def __init__(self, thread_id):
        super().__init__()
        self.thread_id = thread_id

    def run(self):
        while True:
            if condition.acquire():
                if not products.full(): # 如果队列不是满,生产数据
                    products.put(random.randint(1, 100))
                    print("Call consumer now, we have products")
                    condition.notify() # 通知消费者消费
                else: #如果队列是满的,通知消费者,并停止生产
                    condition.notify()
                    condition.wait()
                condition.release()
                time.sleep(0.1)

class Consumer(Thread):
    def __init__(self, thread_id):
        super().__init__()
        self.thread_id = thread_id

    def run(self):
        while True:
            if condition.acquire():
                if not products.empty(): # 如果队列不为空,则消费数据
                    print("consumer get a product now: %d" %products.get())
                else: # 如果产品队列是空的,通知生产者开始生产,并停止消费
                    print("No products now, wait...")
                    condition.notify()
                    condition.wait()
                condition.release()
                time.sleep(0.1)

p = Producer('producer')
c = Consumer('consumer')

p.start()
c.start()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。