python 生产者消费者设计类
时间: 2023-11-29 15:40:10 浏览: 83
架构设计 生产者消费者模式
以下是一个基本的 Python 生产者消费者设计类:
```python
import threading
import time
import random
class ProducerConsumer:
def __init__(self):
self.buffer = []
self.max_size = 5
self.cond = threading.Condition()
def producer(self):
while True:
self.cond.acquire()
if len(self.buffer) == self.max_size:
print("Buffer is full, producer is waiting")
self.cond.wait()
else:
item = random.randint(1, 10)
self.buffer.append(item)
print(f"Producer produced item {item}")
self.cond.notify()
self.cond.release()
time.sleep(random.random())
def consumer(self):
while True:
self.cond.acquire()
if not self.buffer:
print("Buffer is empty, consumer is waiting")
self.cond.wait()
else:
item = self.buffer.pop(0)
print(f"Consumer consumed item {item}")
self.cond.notify()
self.cond.release()
time.sleep(random.random())
```
上面的代码中,我们创建了一个名为 `ProducerConsumer` 的类。该类有一个实例变量 `buffer`,用于存储生产者生产的项目。它还有一个最大大小 `max_size`,当缓冲区满时,生产者将等待消费者消费项目。我们还创建了一个 `Condition` 对象 `cond`,它用于同步生产者和消费者之间的操作。
该类还有两个方法:`producer` 和 `consumer`。`producer` 方法模拟了生产者,它会不断地生产项目,并将其添加到缓冲区中。如果缓冲区已满,它将等待消费者消费项目。`consumer` 方法模拟了消费者,它会不断地消费项目,并将其从缓冲区中移除。如果缓冲区为空,它将等待生产者生产项目。
最后,我们可以在主函数中创建 `ProducerConsumer` 的实例,并启动两个线程,分别用于生产者和消费者:
```python
if __name__ == '__main__':
pc = ProducerConsumer()
t1 = threading.Thread(target=pc.producer)
t2 = threading.Thread(target=pc.consumer)
t1.start()
t2.start()
```
这样,我们就创建了一个简单的生产者消费者模型。
阅读全文