成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python數據結構與算法—優先級隊列Queue

開發 后端 算法
queue庫提供了一個適用于多線程編程的先進先出(FIFO)數據結構,可以用來在生產者與消費者線程之間安全地傳遞消息或其他數據。它會為調用者處理鎖定,使多個線程可以安全而更容易地處理同一個Queue實例。Queue的大小可能受限,以限制內存使用或處理。

[[405132]]

前言

queue庫提供了一個適用于多線程編程的先進先出(FIFO)數據結構,可以用來在生產者與消費者線程之間安全地傳遞消息或其他數據。

它會為調用者處理鎖定,使多個線程可以安全而更容易地處理同一個Queue實例。Queue的大小可能受限,以限制內存使用或處理。

基本用法

Queue類實現了一個基本的先進先出容器。使用put()將元素增加到這個序列的一端,使用get()從另一端刪除。具體代碼如下所示:

  1. import queue 
  2.  
  3. q = queue.Queue() 
  4.  
  5. for i in range(1, 10): 
  6.     q.put(i) 
  7. while not q.empty(): 
  8.     print(q.get(), end="  "

 運行之后,效果如下:

這里我們依次添加1到10到隊列中,因為先進先出,所以出來的順序也與添加的順序相同。

LIFO隊列

既然有先進先出隊列queue,那么數據結構中肯定也有后進先出的隊列。后進先出的隊列為:LifoQueue,示例如下:

  1. import queue 
  2.  
  3. q = queue.LifoQueue() 
  4.  
  5. for i in range(1, 10): 
  6.     q.put(i) 
  7. while not q.empty(): 
  8.     print(q.get(), end="  "

 運行之后,效果如下:

 

優先隊列

在操作系統中,我們常常會根據優先級來處理任務,比如系統的優先級最高,我們肯定優先處理系統任務,然后才處理用戶的任務。同樣,queue庫給我們提供了PriorityQueue來處理優先級的隊列。

示例如下:

  1. import queue 
  2. import threading 
  3.  
  4. class Job: 
  5.     def __init__(self, priority, desc): 
  6.         self.priority = priority 
  7.         self.desc = desc 
  8.         print("New Job:"desc
  9.         return 
  10.  
  11.     def __eq__(self, other): 
  12.         try: 
  13.             return self.priority == other.priority 
  14.         except AttributeError: 
  15.             return NotImplemented 
  16.  
  17.     def __lt__(self, other): 
  18.         try: 
  19.             return self.priority > other.priority 
  20.         except AttributeError: 
  21.             return NotImplemented 
  22.  
  23. def process_Job(q): 
  24.     while True
  25.         next_job = q.get() 
  26.         print(next_job.desc
  27.         q.task_done() 
  28.  
  29. q = queue.PriorityQueue() 
  30.  
  31. q.put(Job(5, "Five Job")) 
  32. q.put(Job(15, "Fifteen Job")) 
  33. q.put(Job(1, "One Job")) 
  34.  
  35. workers = [ 
  36.     threading.Thread(target=process_Job, args=(q,)), 
  37.     threading.Thread(target=process_Job, args=(q,)), 
  38.  
  39. for work in workers: 
  40.     work.setDaemon(True
  41.     work.start() 
  42.  
  43. q.join() 

 運行之后,效果如下:

這里,我們默認數值越大優先級越高,可以看到15先執行,然后再是5,1任務。這個例子展現了有多個線程在處理任務時,要根據get()時隊列中元素的優先級來處理。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-03-09 06:30:32

JAVA數據結構算法

2020-10-17 11:14:19

數據結構與算法系列

2023-08-08 08:28:03

消息消費端Spring

2009-08-11 14:43:42

C#數據結構與算法

2023-04-14 08:07:20

數據結構算法搜索

2020-10-21 14:57:04

數據結構算法圖形

2020-11-25 14:28:56

DelayedWork

2023-03-08 08:03:09

數據結構算法歸并排序

2021-07-16 07:57:34

Python數據結構

2023-10-27 07:04:20

2023-09-26 12:22:37

隊列Python

2023-09-25 12:23:18

Python

2012-08-14 09:38:29

WAN優化

2023-03-07 08:02:07

數據結構算法數列

2023-03-10 08:07:39

數據結構算法計數排序

2023-03-02 08:15:13

2024-03-11 07:46:40

React優先級隊列二叉堆

2023-04-27 09:13:20

排序算法數據結構

2022-12-23 09:41:14

優先級反轉

2023-02-08 07:52:36

跳躍表數據結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久操av在线 | 亚洲一区中文字幕在线观看 | 久久精品二区亚洲w码 | 九九热精品视频在线观看 | 日本不卡高清视频 | 日本国产欧美 | 色综合一区 | 96久久久久久 | 久久久91精品国产一区二区三区 | 亚洲国产精品成人无久久精品 | 中文字幕欧美一区二区 | 涩涩视频网站在线观看 | 中文在线亚洲 | 国产乱码精品1区2区3区 | 午夜视频在线 | 亚洲精品91 | 99在线免费视频 | 可以在线观看av的网站 | 九九精品视频在线 | 欧美精品综合 | 美女视频黄色片 | 成人特区| 午夜视频网站 | 日本超碰 | 天天干天天想 | 国产高清性xxxxxxxx | 丝袜毛片| 天堂综合网久久 | 青青草在线视频免费观看 | 日本韩国欧美在线观看 | 久久青草av| 精品一区二区三区四区外站 | 99精品久久久 | 91精品国产一区二区三区 | 高清视频一区二区三区 | jizz视频 | 午夜手机在线视频 | 久久精品国产免费 | 欧美一区精品 | 久久亚洲国产精品 | 久久不卡日韩美女 |