Queue 实现生产者消费者模型(实例讲解)
Python中,队列是线程间最常用的交换数据的形式。
PythonQueue模块有三种队列及构造函数:
1、PythonQueue模块的FIFO队列先进先出。classQueue.Queue(maxsize)
2、LIFO类似于堆,即先进后出。classQueue.LifoQueue(maxsize)
3、还有一种是优先级队列级别越低越先出来。classQueue.PriorityQueue(maxsize)
此包中的常用方法(q=Queue.Queue()):
q.qsize()返回队列的大小
q.empty()如果队列为空,返回True,反之False
q.full()如果队列满了,返回True,反之False
q.full与maxsize大小对应
q.get([block[,timeout]])获取队列,timeout等待时间
q.get_nowait()相当q.get(False)
非阻塞q.put(item)写入队列,timeout等待时间
q.put_nowait(item)相当q.put(item,False)
q.task_done()在完成一项工作之后,q.task_done()函数向任务已经完成的队列发送一个信号
q.join()实际上意味着等到队列为空,再执行别的操作
#coding=utf-8
importQueue
importthreading
importtime
q=Queue.Queue(maxsize=10)#创建一个队列对象,长度限制为10,maxsize小于1就代表无限制
defproducer(name):
count=1
whileTrue:
q.put(count)#将值放入队列中默认block为True,无数据时调用线程暂停,否则抛出异常
print"%s生产了包子%d"%(name,count)
count+=1
time.sleep(0.5)
defconsumer(name):
whileTrue:
conut_con=q.get()#从队列中取值默认block为True,无数据时调用线程暂停,否则抛出异常
print"%s吃掉了包子%d"%(name,conut_con)
time.sleep(2)
pro=threading.Thread(target=producer,args=("德源",))
con=threading.Thread(target=consumer,args=("xu",))
con2=threading.Thread(target=consumer,args=("sx",))
pro.start()
con.start()
con2.start()#开启线程
以上这篇Queue实现生产者消费者模型(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。