Python-线程队列/生产者与消费者

线程队列,生产者与消费者:
在这里插入图片描述
线程队列:

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()

猜你喜欢

转载自blog.csdn.net/Liang_Ren_/article/details/88560408