生产者消费者模型代码实现
时间: 2023-10-06 16:14:04 浏览: 99
生产者消费者模型是一种经典的多线程同步模型,它描述了两类线程共享同一缓冲区的情形:生产者线程往缓冲区里添加数据,而消费者线程则从缓冲区里取出数据。以下是一个简单的生产者消费者模型的代码实现:
```python
import threading
import time
import random
class Producer(threading.Thread):
def __init__(self, buffer):
super().__init__()
self.buffer = buffer
def run(self):
while True:
item = random.randint(1, 10)
self.buffer.put(item)
print(f"Producer produced item {item}")
time.sleep(random.random())
class Consumer(threading.Thread):
def __init__(self, buffer):
super().__init__()
self.buffer = buffer
def run(self):
while True:
item = self.buffer.get()
print(f"Consumer consumed item {item}")
time.sleep(random.random())
class Buffer:
def __init__(self, size):
self.size = size
self.items = []
self.lock = threading.Lock()
self.empty = threading.Semaphore(size)
self.full = threading.Semaphore(0)
def put(self, item):
self.empty.acquire()
self.lock.acquire()
self.items.append(item)
self.lock.release()
self.full.release()
def get(self):
self.full.acquire()
self.lock.acquire()
item = self.items.pop(0)
self.lock.release()
self.empty.release()
return item
if __name__ == "__main__":
buffer = Buffer(5)
producer = Producer(buffer)
consumer = Consumer(buffer)
producer.start()
consumer.start()
```
这个代码实现了一个简单的生产者消费者模型,其中 `Producer` 和 `Consumer` 是两个线程类,分别代表生产者和消费者。`Buffer` 类则是缓冲区,其中使用了两个信号量 `empty` 和 `full` 来分别表示缓冲区的空位和已有数据的数量。`Producer` 线程在运行时会不断往缓冲区里添加随机数,而 `Consumer` 线程则会不断从缓冲区里取出数据并打印。整个程序会一直运行直到手动终止。