Python 系列文章 —— queue

2022-01-13 11:00:06 浏览数 (2)

  • queue_common_function_demo
代码语言:javascript复制
import queue
q = queue.Queue()
q.put(100)
q.put(200)
q.qsize() # 获取队列大小,此处结果为 2


import queue
q = queue.Queue(maxsize=1)
q.empty() # 判断队列是否空,此处结果为 True
q.full() # 判断队列是否满,此处结果为 False
q.put(100)
q.empty() # False
q.full() # True
  • queue_put_get_demo
代码语言:javascript复制
import queue
q = queue.Queue(maxsize=1)
q.put(100)


import queue
q = queue.Queue(maxsize=1)
q.put(100)
q.put(100,True,2) # 创建一个容量为 1 的队列,2 秒内没有位置添加任务则引发 Full 异常
q.put(100) # 该方法会一直阻塞


import queue
q = queue.Queue(maxsize=1)
q.put(100)
q.put(100,False,2) # 创建一个容量为 1 的队列,在第二次放入任务时指定为非阻塞模式,则会立刻引发 Full 异常


import queue
q = queue.Queue()
q.put(100)
q.get() # 此处的返回值为 100。交互模式下才会有输出,如果用 idea 请使用 print(q.get()) 查看结果(下同)

import queue
q = queue.Queue()
q.put(100)
q.get() # 此处的返回值为 100
q.get(True,2) # 2 秒钟内没有任务可获取,则引发 Empty 异常
q.get() # 因为队列为空,所以该方法会一直阻塞


import queue
q = queue.Queue()
q.put(100)
q.get() # 此处的返回值为 100
q.get(False,2) # 指定为非阻塞模式,队列为空则立即引发 Empty 异常
  • queue_three_queue_compare_demo
代码语言:javascript复制
# FIFO 队列
import queue
q = queue.Queue()
for index in range(10):
    q.put(index)
while not q.empty():
    print(q.get(), end=", ")
# 输出结果如下
# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 


# LIFO 队列
import queue
q = queue.LifoQueue()
for index in range(10):
    q.put(index)
while not q.empty():
    print(q.get(), end=", ")
# 输出结果如下
# 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 


# 优先级队列,存放内置类型
import queue
q = queue.PriorityQueue()
for index in range(10,0,-1):
    q.put(index)
while not q.empty():
    print(q.get(), end=", ")
# 输出结果如下
# 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 


# 优先级队列,存放元组
import queue
q = queue.PriorityQueue()
q.put(["d","b"])
q.put(["c","b"])
while not q.empty():
    print(q.get(), end=", ")
# 输出结果如下
# ['c', 'b'], ['d', 'b'], 


# 优先级队列,存放自定义类型
import queue
q = queue.PriorityQueue()

class Animal:
    def __init__(self, age, name):
        self.age = age
        self.name = name
    def __lt__(self, other): # 实现 < 操作
        return self.age < other.age # 如果将 < 变成 > 相当于逆序

q.put(Animal(3,"cat"))
q.put(Animal(2,"dog"))

while not q.empty():
    animal = q.get()
    print(animal.name, animal.age, end=", ")
# 输出结果如下
# dog 2, cat 3, 

0 人点赞