生产者与消费者,主要目的是为了提高效率
定义:在并发编程中使用该模式,能够解决绝大多数并发问题。
通过平衡生产线程与消费线程的工作能力,来处理程序的整体处理数据速度。
下面示例为厨师生产包子,消费者拿包子,首先需要创建一个线程队列,然后生产者往里放数据,然后消费者从队列中拿数据,
爬虫会用到,用到记得回来查
from queue import Queue
from threading import Thread
import time,random
创建一个线程队列
q=Queue(maxsize=10) #只能放10个包子
生产者
def cooker(name):
count=1
while True:
q.put("包子%d"%(count))
print("%s---生产了包子---%d"%(name,count))
count+=1
time.sleep(0.4)
消费者
def consumer(name):
while True:
print("%s吃了%s"%(name,q.get()))
time.sleep(1)
if __name__ == '__main__':
厨师1:创建两个厨师线程并启动,然后启动厨师线程开始生产包子
c=Thread(target=cooker,args=("刘大厨",))
c.start()
c2=Thread(target=cooker,args=("李大厨",))
c2.start()
消费者:创建两个消费者,然后启动消费者线程开始拿包子
guke1=Thread(target=consumer,args=("小明",))
guke2=Thread(target=consumer,args=("铁蛋",))
guke1.start()
guke2.start()
from threading import Thread
import time,random
创建一个线程队列
q=Queue(maxsize=10) #只能放10个包子
生产者
def cooker(name):
count=1
while True:
q.put("包子%d"%(count))
print("%s---生产了包子---%d"%(name,count))
count+=1
time.sleep(0.4)
消费者
def consumer(name):
while True:
print("%s吃了%s"%(name,q.get()))
time.sleep(1)
if __name__ == '__main__':
厨师1:创建两个厨师线程并启动,然后启动厨师线程开始生产包子
c=Thread(target=cooker,args=("刘大厨",))
c.start()
c2=Thread(target=cooker,args=("李大厨",))
c2.start()
消费者:创建两个消费者,然后启动消费者线程开始拿包子
guke1=Thread(target=consumer,args=("小明",))
guke2=Thread(target=consumer,args=("铁蛋",))
guke1.start()
guke2.start()