python队列Queue

2020-11-09 09:58:16 浏览数 (1)

Queue

#1 环境

代码语言:javascript复制
Python3.7.3

#2 开始

代码语言:javascript复制
from queue import Queue,LifoQueue,PriorityQueue

#2.1 队列种类

  • FIFO(先进先出)
代码语言:javascript复制
q = Queue(maxsize=0)
  • LIFO(后进先出)
代码语言:javascript复制
q = LifoQueue(maxsize=0)
  • priority(优先队列)
代码语言:javascript复制
q = PriorityQueue(maxsize=0)

# 后面详细说

maxsize : maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。


#2.2 操作

  • 入队
代码语言:javascript复制
put(item, block=True, timeout=None)

# item: 入队的数据(任何数据类型都可以)
# block: bool型,默认True
# timeout: 超时时间,默认None
# 1.当block为默认值时,如果队列已经处于"满队"状态,还要继续往队列插入数据,这时timeout的值就是程序抛异常的时间(timeout=None时,程序永远处于"堵塞"状态,除非有数据"出队")
# 2.当block=False时,不论timeout是什么,只要队列"堵塞"就马上抛异常
  • 出队
代码语言:javascript复制
get(block=True, timeout=None)

# block: bool型,默认True
# timeout: 超时时间,默认None
# 1.当block为默认值时(True),如果队列已经处于"空"状态,还要继续"出队",这时timeout的值就是程序抛异常的时间(timeout=None时,程序永远处于"空转"状态(无限循环),除非有数据"入队")
# 2.当block=False时,不论timeout是什么,只要队列"空转"就马上抛异常
  • 获取队列大小
代码语言:javascript复制
q.qsize()
  • 获取队列是否为空
代码语言:javascript复制
# 如果队列为空,返回True,反之False 
q.empty()
  • 判断队列是否"满队"
代码语言:javascript复制
# 如果队列满了,返回True,反之False
q.full()
  • 清空队列
代码语言:javascript复制
q.queue.clear()

#2.3 优先队列 (PriorityQueue)

代码语言:javascript复制
from queue import PriorityQueue
q = PriorityQueue()

class Job(object):
    def __init__(self, priority, description):
        self.priority = priority
        self.description = description
        print('入队:', description)
        return

    def __lt__(self, other):
        return self.priority < other.priority
        
# 数字越小,优先级越高
q.put(Job(1,"aaa"))
q.put(Job(2,"bbb"))
q.put(Job(8,"ccc"))
q.put(Job(3,"ddd"))
print(q.get().description)
print(q.get().description)
print(q.get().description)
print(q.get().description)

0 人点赞