生产者消费者问题python
时间: 2023-07-25 21:48:56 浏览: 98
生产者消费者问题是一个经典的多线程并发问题,它的主要目的是解决生产者和消费者之间的同步问题,避免生产者在队列已满的情况下继续生产,以及消费者在队列为空的情况下继续消费的情况。
下面是一个简单的 Python 实现:
```
import threading
import time
import queue
# 创建一个队列
q = queue.Queue(maxsize=10)
# 定义生产者类
class Producer(threading.Thread):
def run(self):
while True:
if q.qsize() < 10:
# 向队列中添加元素
q.put("product")
print("{} 生产了一个产品,现在队列大小为 {}".format(self.name, q.qsize()))
time.sleep(1)
# 定义消费者类
class Consumer(threading.Thread):
def run(self):
while True:
if q.qsize() > 0:
# 从队列中取出元素
q.get()
print("{} 消费了一个产品,现在队列大小为 {}".format(self.name, q.qsize()))
time.sleep(2)
# 创建两个生产者和三个消费者
producers = [Producer() for i in range(2)]
consumers = [Consumer() for i in range(3)]
# 启动所有线程
for producer in producers:
producer.start()
for consumer in consumers:
consumer.start()
# 等待所有线程执行完成
for producer in producers:
producer.join()
for consumer in consumers:
consumer.join()
```
在这个例子中,我们使用 Python 内置的 `queue` 模块实现了一个简单的队列,生产者和消费者都是继承自 `threading.Thread` 类的子类,通过重写 `run` 方法实现线程的执行逻辑。当队列大小小于 10 时,生产者会向队列中添加一个元素;当队列大小大于 0 时,消费者会从队列中取出一个元素。通过使用 `time.sleep` 方法来模拟生产和消费的时间。
阅读全文