队列方法
q = queue.Queue().put()
队列方法
释义
q.put()
存数据
q.get()
获取队列
q.qsize()
队列大小
q.empty()
判断队列是否为空,为空返回True
q.full()
判断队列是否已满,已满返回True
q.put_nowait()
相当于q.put(block=Flase)
q.get_nowait()
相当于q.get(block=Flase)
q.task_done()
在完成一项工作后,q.task_done向任务已完成队列发送信号
q.join()
等待队列,接收q.task_done发送的信号
队列优先级
queue.Queue()
先进先出
# -*- coding:utf-8 -*-
import queue
q = queue.Queue(3) #创建一个空队列 【先进先出】
q.put(1) #往队列中添加值
q.put(2)
q.put(3)
while 1:
data = q.get()
print(data)
1
2
3
queue.LifoQueue()
先进后出
# -*- coding:utf-8 -*-
import queue
q = queue.LifoQueue(3) #创建一个空队列 【先进后出】
q.put(1) #往队列中添加值
q.put(2)
q.put(3)
while 1:
data = q.get()
print(data)
321
queue.PriorityQueue()
定级队列
# -*- coding:utf-8 -*-
import queue
q = queue.PriorityQueue(3) #创建一个空队列 【定级队列】
q.put([2,"hello"]) #往队列中添加值
q.put([1,"你好"])
q.put([3,"hi"])
while 1:
data = q.get()
print(data[1])
你好
hello
hi
多线程队列
# -*- coding:utf-8 -*-
from threading import Thread
import queue
def f(q,n):
q.put(n * n + 1) #存数据到队列中
print("队列新增数据内存地址:",id(q)) #打印对象内存地址
if __name__ == "__main__":
q = queue.Queue() #实例化线程队列
print("队列内存地址:",id(q)) #打印对象内存地址
for i in range(3): #for循环调用
p = Thread(target=f,args=(q,i)) #建立线程,值通过args传值
p.start() #启用线程
print(q.get()) #拿队列中的值
print(q.get())
print(q.get())
队列内存地址: 2641998861088
队列新增数据内存地址: 2641998861088
队列新增数据内存地址: 2641998861088
队列新增数据内存地址: 2641998861088
1
2
5
多进程队列
# -*- coding:utf-8 -*-
from multiprocessing import Process,Queue
def f(q,n):
q.put(n * n + 1) #存数据到队列中
print("队列新增数据内存地址:",id(q)) #打印对象内存地址
if __name__ == "__main__":
q = Queue() #实例化进程队列
print("队列内存地址:",id(q)) #打印对象内存地址
for i in range(3): #for循环调用
p = Process(target=f,args=(q,i)) #建立进程,值通过args传值
p.start() #启用进程
print(q.get()) #拿队列中的值
print(q.get())
print(q.get())
队列内存地址: 1858644890400
队列新增数据内存地址: 2587420171064
1
队列新增数据内存地址: 2744677276528
2
队列新增数据内存地址: 2763448032056
5
生产消费者模型
# -*- coding:utf-8 -*-
import time,random
import queue,threading
q = queue.Queue()
def Producer(name):
count = 0 #初始化值(生产数量)
while count < 10: #指定生产数量
print("生产中...")
time.sleep(10) #随机时间用于测试
count += 2 #生产数值
q.put(count) #添加数值到队列
q.task_done() #向队列发送消息
print("%s生产%s个包子" %(name,count))
print ("今天的包子卖完了!")
def Consumer(name):
count = 0 #初始化值(消费数量)
while count < 10: #指定消费数量
time.sleep(random.randrange(4)) #随机时间用于测试
# if not q.empty(): #判断队列中是否有数值
q.join()
count += 1 #消费数值
data = q.get(count) #从队列中拿取数值
q.join() #等待其他线程(等待包子制作完成)
print("%s买走了%s了" %(name,data))
p1 = threading.Thread(target=Producer,args=('厨师',)) #生产者
c1 = threading.Thread(target=Consumer,args=('客人-小明',)) #消费者
c2 = threading.Thread(target=Consumer,args=('客人-小王',)) #消费者
p1.start()
c1.start()
c2.start()
生产中...
厨师生产2个包子
生产中...
客人-小明买走了2了
厨师生产4个包子
生产中...
客人-小王买走了4了
厨师生产6个包子
生产中...
客人-小明买走了6了
厨师生产8个包子
生产中...
客人-小王买走了8了
厨师生产10个包子
客人-小明买走了10了
今天的包子卖完了!