激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python隊列Queue的詳解

python隊列Queue的詳解

2021-06-25 00:17gxyz Python

這篇文章主要介紹了python隊列Queue,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

queue

queue是python標準庫中的線程安全的隊列(fifo)實現,提供了一個適用于多線程編程的先進先出的數據結構,即隊列,用來在生產者和消費者線程之間的信息傳遞

基本fifo隊列

class queue.queue(maxsize=0)

fifo即first in first out,先進先出。queue提供了一個基本的fifo容器,使用方法很簡單,maxsize是個整數,指明了隊列中能存放的數據個數的上限。一旦達到上限,插入會導致阻塞,直到隊列中的數據被消費掉。如果maxsize小于或者等于0,隊列大小沒有限制。

舉個栗子:

?
1
2
3
4
5
6
7
8
9
import queue
 
q = queue.queue()
 
for i in range(5):
  q.put(i)
 
while not q.empty():
  print q.get()

輸出:

0
1
2
3
4

 lifo隊列

class queue.lifoqueue(maxsize=0)

lifo即last in first out,后進先出。與棧的類似,使用也很簡單,maxsize用法同上

再舉個栗子:

?
1
2
3
4
5
6
7
8
9
import queue
 
q = queue.lifoqueue()
 
for i in range(5):
  q.put(i)
 
while not q.empty():
  print q.get()

輸出:

4
3
2
1
0

 可以看到僅僅是將queue.quenu類替換為queue.lifiqueue類

優先級隊列

class queue.priorityqueue(maxsize=0)

構造一個優先隊列。maxsize用法同上。

?
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
import queue
import threading
 
class job(object):
  def __init__(self, priority, description):
    self.priority = priority
    self.description = description
    print 'job:',description
    return
  def __cmp__(self, other):
    return cmp(self.priority, other.priority)
 
q = queue.priorityqueue()
 
q.put(job(3, 'level 3 job'))
q.put(job(10, 'level 10 job'))
q.put(job(1, 'level 1 job'))
 
def process_job(q):
  while true:
    next_job = q.get()
    print 'for:', next_job.description
    q.task_done()
 
workers = [threading.thread(target=process_job, args=(q,)),
    threading.thread(target=process_job, args=(q,))
    ]
 
for w in workers:
  w.setdaemon(true)
  w.start()
 
q.join()

結果

job: level 3 job
job: level 10 job
job: level 1 job
for: level 1 job
for: level 3 job
for: job: level 10 job

 一些常用方法

task_done()

意味著之前入隊的一個任務已經完成。由隊列的消費者線程調用。每一個get()調用得到一個任務,接下來的task_done()調用告訴隊列該任務已經處理完畢。

如果當前一個join()正在阻塞,它將在隊列中的所有任務都處理完時恢復執行(即每一個由put()調用入隊的任務都有一個對應的task_done()調用)。

join()

阻塞調用線程,直到隊列中的所有任務被處理掉。

只要有數據被加入隊列,未完成的任務數就會增加。當消費者線程調用task_done()(意味著有消費者取得任務并完成任務),未完成的任務數就會減少。當未完成的任務數降到0,join()解除阻塞。

put(item[, block[, timeout]])

將item放入隊列中。

  1. 如果可選的參數block為true且timeout為空對象(默認的情況,阻塞調用,無超時)。
  2. 如果timeout是個正整數,阻塞調用進程最多timeout秒,如果一直無空空間可用,拋出full異常(帶超時的阻塞調用)。
  3. 如果block為false,如果有空閑空間可用將數據放入隊列,否則立即拋出full異常
  4. 其非阻塞版本為put_nowait等同于put(item, false)

get([block[, timeout]])

從隊列中移除并返回一個數據。block跟timeout參數同put方法

其非阻塞方法為`get_nowait()`相當與get(false)

empty()

如果隊列為空,返回true,反之返回false

以上所述是小編給大家介紹的python隊列queue詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/itogo/p/5635629.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性生大片免费观看一片黄动漫 | 久久免费视频精品 | 嫩草影院在线观看网站成人 | 宅男噜噜噜66一区二区 | 一级做a爱片毛片免费 | 精品国产一区二区三区久久久蜜月 | 神马久久精品综合 | 欧美乱码精品一区 | 久久久久久久久久91 | 午夜视频国产 | 国产一区免费 | 狠狠久久伊人中文字幕 | 国产精品6区 | 黄污污网站| 老司机一级毛片 | 日本一区二区不卡在线观看 | jizzjizzxxxxx| 毛片一区二区三区四区 | 极品五月天 | 国产精品野外av久久久 | 亚洲乱妇19p | 萌白酱福利视频在线网站 | 国产精品久久久久久久久久久久久久久久 | 欧美一级全黄 | 欧美一区二区三区成人 | 黄片毛片一级 | 本色视频aaaaaa一级网站 | 国产三级国产精品国产普男人 | 国产午夜免费 | 视频在线色| 国产在线色 | 欧美黄在线 | 国产一级aaa全黄毛片 | 久久狠狠高潮亚洲精品 | 99国产精成人午夜视频一区二区 | 新久草视频| 成人午夜一区二区 | 中国大陆一级毛片 | 亚洲精品一区二区三区免 | 亚洲性一区 | 亚洲5区 |