import random
import threading
import time
# 生产者线程数
PRODUCT_WORKER_THREAD_NUM = 10
# 消费者线程书
CONSUMER_WORKER_THREAD_NUM = 5
# 生产者类
class Producter(threading.Thread):
def __init__(self, name):
super(Producter, self).__init__()
self.name = "Producter:" + str(name)
def run(self):
things = ['A', 'B', 'C', 'D', 'E', 'F']
for _ in range(CONSUMER_WORKER_THREAD_NUM):
production = random.choice(things)
print(self.name + " producted--->" + production)
production = production + " from " + self.name
all_productions.put(production) # 将生产的数据放入队列
time.sleep(1)
time.sleep(5)
# 消费者类
class Consumer(threading.Thread):
def __init__(self, name):
super(Consumer, self).__init__()
self.name = "Consumer:" + str(name)
def run(self):
for _ in range(PRODUCT_WORKER_THREAD_NUM):
thing = all_productions.get() # 拿出已经生产好的数据
print(self.name + " is using--->" + thing)
time.sleep(2)
all_productions.task_done() # 告诉队列有关这个数据的任务已经完成
time.sleep(5)
if __name__ == "__main__":
all_productions = queue.Queue()
# 启动10个生产者线程生产
product_threads = []
for i in range(PRODUCT_WORKER_THREAD_NUM):
p = Producter(i)
p.start()
product_threads.append(p)
# 启动5个消费者线程消费
consumer_threads = []
for i in range(CONSUMER_WORKER_THREAD_NUM):
c = Consumer(i)
c.start()
consumer_threads.append(c)
# 阻塞,直到生产者生产的数据被消耗完
all_productions.join()
# 等待生产者线程结束
for p in product_threads:
p.join()
# 等待消费者线程结束
for c in consumer_threads:
c.join()
print('阔以了....')
Python Queue 生产者消费者
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 方便的队列 当我们处理多线程的资源共享时,线程模块的管理会变得很复杂。我们已经看到了,Python线程模块提供了很...
- 生产者-消费者问题与python Queue模块生产者-消费者模型是一个典型的场景,在这个场景下,商品或服务的生产...
- 一、概述 什么是生产者消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此...
- Python Queue模块是一个线程安全的队列。基于Queue实现生产者及消费者模型如下。参考Effective...