一个生产者进程与多个消费者进程同步工作的源代码
时间: 2024-05-13 11:14:15 浏览: 67
生产者与消费者源代码
5星 · 资源好评率100%
下面是一个使用 Python 中的 Queue 模块实现的生产者-消费者模型的示例代码:
```python
import queue
import threading
import time
# 创建一个队列,最大容量为10
q = queue.Queue(maxsize=10)
# 生产者线程函数
def producer():
while True:
# 随机生成一个数字
num = random.randint(1, 100)
# 将数字放入队列
q.put(num)
print("Producer put", num, "into the queue.")
time.sleep(random.random())
# 消费者线程函数
def consumer(consumer_id):
while True:
# 从队列中获取一个数字
num = q.get()
print("Consumer", consumer_id, "got", num, "from the queue.")
# 执行消费者任务
time.sleep(random.random())
# 创建一个生产者线程
producer_thread = threading.Thread(target=producer)
producer_thread.start()
# 创建多个消费者线程
consumer_threads = []
for i in range(5):
consumer_thread = threading.Thread(target=consumer, args=(i,))
consumer_threads.append(consumer_thread)
consumer_thread.start()
# 等待所有线程执行完毕
producer_thread.join()
for consumer_thread in consumer_threads:
consumer_thread.join()
```
在这个示例中,我们创建了一个容量为 10 的队列 `q`,并创建了一个生产者线程和 5 个消费者线程。生产者线程会不断生成随机数并将其放入队列中,而消费者线程则从队列中获取数字并执行自己的任务。由于队列的最大容量为 10,所以当队列已满时,生产者线程会被阻塞,直到有消费者线程取走了一个数字。同样地,当队列为空时,消费者线程会被阻塞,直到生产者线程放入了一个数字。通过使用 Queue 模块提供的线程安全的队列,我们可以很容易地实现多个线程之间的同步和协作。
阅读全文