python学习笔记 day39 队列

1. 队列

import queue
q=queue.Queue()  # 线程安全的,队列是先进先出FIFO
q.put("hello")   #
q.put("xuanxuan")
print(q.qsize())  # 获得队列的大小
print(q.get())  # FIFO  所以先打印hello
print(q.get())

运行结果:

 

2. LOFI后进先出的队列---栈

import queue
q=queue.LifoQueue()   # LIFO后进先出的队列----栈
q.put("hello")
q.put("xuanxuan")
print(q.qsize())  # 获得队列的大小
print(q.get())  # LifoQueue()是LIFO模型后进先出,所以先打印xuanxuan
print(q.get())

 

运行结果:


 

 3. 带有优先级的队列

import queue
q=queue.PriorityQueue()  # 带有优先级的队列
q.put((10,"hello"))      # put()需要接收一个元组(第一个参数是优先级,第二个是所要传的内容)
q.put((4,"xuanxuan"))
q.put((2,"嘻嘻"))  # 数字越小,代表优先级越高,get()时越会被优先打印
print(q.qsize())   # 打印带有优先级队列的长度
print(q.get())
print(q.get())
print(q.get())

 

 运行结果:

 

 

 4. 使用多线程借助队列实现生产者消费者模型

import queue
from threading import Thread
import time
import random
def procuder(name,food):
    for i in range(10):
        q.put((food,i))
        # q.put((i,(food,i)))  # 如果使用的是带有优先级的队列
        print("%s生产%s--%s"%(name,food,i))

def consumer(name):
    time.sleep(random.random())
    food,i=q.get()
    print("%s消费了%s"%(name,food))

q=queue.Queue()
# q=queue.LifoQueue()  # 后进先出的队列
# q=queue.PriorityQueue()  # 传参时需要传一个元组(第一个参数时优先级,第二个参数是内容)
t1=Thread(target=procuder,args=("xuanxuan","酸奶酪"))  # 创建一个线程执行生产者--procuder
t1.start()

for i in range(10):
    t=Thread(target=consumer,args=(i,))  # 创建10个线程执行consumer消费者
    t.start()

 

运行结果:

 

posted @ 2018-10-15 21:13  写的BUG代码少  阅读(189)  评论(0编辑  收藏  举报