python进阶之多线程(进程)同步执行的消费者与生产者模型

Python的Queue模块中提供了同步的、 线程安全的队列类, 包括FIFO(先⼊先出)队列Queue, LIFO(后⼊先出) 队列LifoQueue, 和优先级队列PriorityQueue。 这些队列都实现了锁原语(可以理解为原⼦操作, 即要么不做, 要么就做完) , 能够在多线程中直接使⽤。 可以使⽤队列来实现线程间的同步。

⽤FIFO队列实现上述⽣产者与消费者问题的代码如下:

from threading import Thread
from queue import Queue
import time

class Producer(Thread):
	def run(self):
		global queue
		count = 0
		while True:
			if queue.qsize() <1000:
				if (1000-queue.qsize()>100):
					for i  in range(100):
						count += 1		
						msg = '生产产品'+str(count)	
						queue.put(msg)
						print(msg)
			time.sleep(0.5)

class Consumer(Thread):
	def run(self):
		global queue
		while True:
			if queue.qsize()>100:
				for i in range(5):
					print(self.name+'消费了'+queue.get())
			time.sleep(1)


def main():

	
	for i in range(500):
		queue.put('初始化产品'+str(i))
	
	for pi in range(2):
		producer = Producer()
		producer.start()
	
	for ci in range(5):
		consumer = Consumer()
		consumer.start()


if __name__ == '__main__':
	
	queue = Queue()
	main()	


⽣产者消费者模式的说明
         为什么要使⽤⽣产者和消费者模式?在线程世界⾥, ⽣产者就是⽣产数据的线程, 消费者就是消费数据的线程。在多线程开发当中, 如果⽣产者处理速度很快, ⽽消费者处理速度很慢, 那么⽣产者就必须等待消费者处理完, 才能继续⽣产数据。 同样的道理, 如果消费者的处理能⼒⼤于⽣产者, 那么消费者就必须等待⽣产者。 为了解决这个问题于是引⼊了⽣产者和消费者模式。什么是⽣产者消费者模式⽣产者消费者模式是通过⼀个容器来解决⽣产者和消费者的强耦合问题。 ⽣产者和消费者彼此之间不直接通讯, ⽽通过阻塞队列来进⾏通讯, 所以⽣产者⽣产完数据之后不⽤等待消费者处理, 直接扔给阻塞队列, 消费者不找⽣产者要数据, ⽽是直接从阻塞队列⾥取, 阻塞队列就相当于⼀个缓冲区, 平衡了⽣产者和消费者的处理能⼒。这个阻塞队列就是⽤来给⽣产者和消费者解耦的。

        纵观⼤多数设计模式, 都会找⼀个第三者出来进⾏解耦,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值