在 線程隊列Queue / 線程隊列LifoQueue 文章中分別介紹了先進先出隊列Queue和先進後出隊列LifoQueue,而今天給大家介紹的是最後一種:優先隊列PriorityQueue,對隊列中的數據按照優先級排序,那麼具體怎麼用呢?
一.隊列Queue分類:
1.線程隊列Queue — FIFO(先進先出隊列),即哪個數據先存入,取數據的時候先取哪個數據,同生活中的排隊買東西;
2.線程隊列LifoQueue — LIFO(先進後出隊列),即哪個數據最後存入的,取數據的時候先取,如同打檯球,先進洞的球最後取出,最後進洞的球最先拿出;
3.線程隊列PriorityQueue — PriorityQueue(優先級隊列),即存入數據時候加入一個優先級,取數據的時候優先級最高的取出;
二.優先隊列PriorityQueue簡介
在數據存入的時候設置優先級,取數據的時候默認按照優先級最高的取出,注意:使用優先級存數據取數據,隊列中的數據必須是同一類型,舉個栗子:班級成績排名/身高排名……
值得注意的是:在將數據存入到優先隊列PriorityQueue時,設置的值越小,優先級越高;
三.優先隊列PriorityQueue函數介紹
函數不做過多介紹了,已經在 線程隊列Queue 有了詳細講解,兩者都屬於Queue,函數都一樣!
四.優先隊列PriorityQueue使用
按優先級:不管是數字、字母、列表、元組等(字典、集合沒測),使用優先級存數據取數據,隊列中的數據必須是同一類型,都是按照實際數據的ascii碼錶的順序進行優先級匹配,漢字是按照unicode表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Github:www.github.com
@File:python_priorityqueue.py @Time:2019/11/29 1queue5:25
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """
import queue import threading import time
q = queue.PriorityQueue() q.put([1, 'ace']) q.put([40, 333]) q.put([3, 'afd']) q.put([5, '4asdg']) # 1是級別最高的, while not q.empty(): # 不爲空時候執行 print(q.get())
q = queue.PriorityQueue() q.put('我') q.put('你') q.put('他') q.put('她') q.put('ta') while not q.empty(): print(q.get()) |
輸出結果:
1 2 3 4 5 6 7 8 9 | [1, 'ace'] [3, 'afd'] [5, '4asdg'] [40, 333] ta 他 你 她 我 |
由此可見:在將數據存入到優先隊列PriorityQueue時,設置的值越小,優先級越高!
猜你喜歡:
轉載請註明:猿說Python » python線程隊列PriorityQueue(優先隊列)