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...