线程队列,生产者与消费者:
线程队列:
from queue import Queue#先进先出队列
from queue import PriorityQueue #优先级队列---继承了Queue
from queue import LifoQueue#后进先出
#创建队列
q = Queue(3)
#放数据
q.put('d1')
q.put('d2')
q.put('d3')
print(q.full())#True
print(q.empty())#False
#取数据
q.get()#d1
q.get()#d2
q.get()#d3
print(q.empty())#True
#阻塞
# 见进程队列阻塞
#队列的优先级
pq = PriorityQueue()
# 任务不要直接put,需要封装到元组当中。
# 格式:(数字,消息)
#说明:数字越小优先级越高。
pq.put((1,'文件1'))
pq.put((0,'文件2'))
pq.put((-10,'文件3'))
pq.put((100,'文件4'))
# print(pq.get())#(-10, '文件3')
i = 0
while i<pq.qsize():
print(pq.get())
'''
(-10, '文件3')
(0, '文件2')
(1, '文件1')
(100, '文件4')
'''
#后进先出队列
lq = LifoQueue()
lq.put('d1')
lq.put('d2')
lq.put('d3')
print(lq.get())#d3
生产者与消费者:
from queue import Queue
from threading import Thread
import time
q = Queue(maxsize=10)
#生产者
def cooker(name):
count = 1
while True:
q.put('包子%d'%count)
print('%s---生产了---包子%d'%(name,count))
count +=1
time.sleep(2)
#消费者
def consumer(name):
while True:
print('%s吃了%s'%(name,q.get()))
time.sleep(1)
if __name__ == '__main__':
#厨师1
c1 = Thread(target=cooker,args=('刘大厨',))
c1.start()
#厨师2
c2 = Thread(target=cooker,args=('李大厨',))
c2.start()
#消费者
guke1 = Thread(target=consumer,args=('小明',))
guke1.start()
guke2 = Thread(target=consumer,args=('铁蛋',))
guke2.start()