生产者、消费者、队列

'''
queue队列,什么是队列?排队干一件事,谁去维护排队的关系?预防插队等
队列是一个有顺序的容器,有列表了还要队列干什么。
根本区别是列表里拿走一个数据,数据还在里面。队列是数据取走了就没了
为什么要用队列?提高双方效率,解耦合,生产者向队列里放,(队列),消费者从队列里取
1、先入先出 queue.Queue(maxsize=0)
queue.put()放数据
    (如果放满了再放就会阻塞,用queue.put(block=False)或q.put_nowait()抛异常,或者判断队列长度,为max就不取)
queue.get()取数据
    (如果取完了再取就会阻塞,用queue.get(block=False)或q.get_nowait()抛异常,或者判断队列长度,为0就不取)
queue.qsize()大小
queue.full()大小限制
2、后进先出queue.LifoQueue(maxsize=0)
3、存储数据时设置优先级queue.ProrityQueue(maxsize=0)
    放数据的时候排序了,queue.put((1,"alex"))改变元祖里的数字可以改顺序
'''
'''
生产者消费者模型:利用队列,生产者和消费者通过队列关联。例如web负载均衡

'''
import queue
import threading
import time

q = queue.Queue(maxsize=10)

def Producer(name):
    # 不停的向队列里生产骨头,当然可以有多个生产者
    count = 1
    while True:
        q.put("骨头{0}".format(count))
        print("生产了{0}个骨头".format(count))
        count += 1
        time.sleep(1)

def Consumer(name):
    # 不停的从队列里取骨头,当然可以有多个消费者
    while True:
        print("{0}取到{1}并且吃了它".format(name, q.get()))
        time.sleep(0.5)

p = threading.Thread(target=Producer, args=("alex",))
c1 = threading.Thread(target=Consumer, args=("张三",))
c2 = threading.Thread(target=Consumer, args=("李四",))


p.start()
c1.start()
c2.start()

猜你喜欢

转载自www.cnblogs.com/staff/p/9691647.html
今日推荐