Python 中 queue 模块常用来处理队列相关问题
队列常用于生产者消费者模型, 主要功能为提高效率和程序解耦
1. queue 模块的基本使用和相关说明
- # -*- coding:utf-8 -*-
- # Author:Wong Du
- '''
- 队列常用于生产者消费者模型,
- 主要功能为提高效率和程序解耦
- '''
- import queue
- """实例化队列对象不同规则的三种方法"""
- q1 = queue.Queue(maxsize=2) # 先入先出
- q2 = queue.LifoQueue(maxsize=3) # 后入先出, Last in first out
- q3 = queue.PriorityQueue(maxsize=5) # 根据存储数据的优先级决定谁先出队列
- """
- 添加数据进队列中, 可添加 str,list,tuple 等
- 当添加的数据量超过队列上限的时候, 程序会卡住, 直到有人从队列中取出数据
- 若想让程序不卡住, 可以用 put_nowait 添加数据和配置 block 或 timeout 的 put 参数
- 来让程序抛出异常, 从而进行异常处理或其他操作
- """q1.put("caiyun")
- q1.put( [1, 2, 3, 4, 5] )
- # q1.put_nowait(2)
- # q1.put(2, block=False)
- # q1.put(2, timeout=3)
- q2.put("caiyun")
- q2.put( (1, 2, 3, 4, 5) )
- q3.put(("Wong", 123))
- q3.put(("Caiyun", 322))
- q3.put(("dudu", 98))
- """
- 获取队列中的数据, 同理
- 当队列中没有数据的时候, 程序会卡住, 直到有人添加数据在队列中
- 若想让程序不卡住, 可以用 get_nowait 添加数据和配置 block 或 timeout 的 put 参数
- 来让程序抛出异常, 从而进行异常处理或其他操作
- """print("\033[32;1mQueue Info\033[0m".center(35,'-'))
- print(q1.get())
- print(q1.get())
- # q1.get_nowait()
- # q1.get(block=False)
- # q1.get(timeout=3)
- print("\033[33;1mLifoQueue Info\033[0m".center(35,'-'))
- print(q2.get())
- print(q2.get())
- print("\033[34;1mPriorityQueue Info\033[0m".center(35,'-'))
- print(q3.get()[0])
- print(q3.get())
- # print(q3.get())
- """队列判断和计数, 判断是否为空, 是否已满, 队列长度计数"""
- print(q1.empty())
- print(q1.full())
- print(q3.qsize())
2. queue 模块的简单应用
- # -*- coding:utf-8 -*-
- # Author:Wong Du
- import time
- import queue
- import threading
- q = queue.Queue(maxsize=10)
- def producer(pname):
- count = 1
- while True:
- q.put("baozi%s" % count)
- print("\033[31;1m[%s] 生产了 [baozi%s]...\033[0m" %(pname, count))
- count += 1
- time.sleep(0.5)
- def consumer(cname):
- while True:
- print("\033[33;1m[%s] 收到了 [%s], 并把它吃了...\033[0m" %(cname, q.get()))
- time.sleep(2)
- p1 = threading.Thread(target=producer, args=("Caiyun", ))
- p1.start()
- c1 = threading.Thread(target=consumer, args=("dudu", ))
- c2 = threading.Thread(target=consumer, args=("wong", ))
- c1.start()
- # c2.start()
queue&threading_生产者消费者实例
来源: http://www.bubuko.com/infodetail-2730085.html