Python 优先级队列PriorityQueue 用法示例

优先队列(PriorityQueue)是队列的变体,按优先级顺序(最低优先)检索打开的条目。

条目通常是以下格式的元组:

插入格式:q.put((priority number, data))

特点:默认priority number 越小,优先级越高

其他的操作和队列相同

最常用的成员函数

put() 插入元素

get()取队首元素的值并将其弹出.

full() 判断是否为满.

empty() 判断是否为空.

# -*- coding: utf-8 -*
import queue

# 定义比较的元素对象
class Task(object):
    def __init__(self, priority, name):
        self.priority = priority
        self.name = name

    def __str__(self):
        return "Task(priority={p}, name={n})".format(p=self.priority, n=self.name)


    def __lt__(self, other):
        """ 定义<比较操作符。"""
        # 从大到小排序
        return self.priority > other.priority




tsq = queue.PriorityQueue()

# 插入元素
tsq.put_nowait(Task(3, "task1"))  # 自定义的类定义了__lt__, 可以比较大小
tsq.put_nowait(Task(1, "task2"))
tsq.put_nowait(Task(2, "task3"))


# 遍历队列
print("取队首元素之前:")
for item in tsq.queue:
    print(item)


# 取队首
print("取到队首")
print(tsq.get())  # return: Task(priory=3, name=task1)


# 遍历队列
print("取队首元素之后:")
for item in tsq.queue:
    print(item)


print("队列长度:")
print(tsq.qsize())

print("队列是否为空:")
print(tsq.empty())

官方文档:https://docs.python.org/3/library/queue.html

源代码:https://github.com/python/cpython/blob/3.11/Lib/queue.py

猜你喜欢

转载自blog.csdn.net/u013288190/article/details/128810536