欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python隊(duì)列Queue的詳解

 更新時(shí)間:2019年05月10日 14:15:27   作者:gxyz  
這篇文章主要介紹了python隊(duì)列Queue,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Queue

Queue是python標(biāo)準(zhǔn)庫中的線程安全的隊(duì)列(FIFO)實(shí)現(xiàn),提供了一個(gè)適用于多線程編程的先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),即隊(duì)列,用來在生產(chǎn)者和消費(fèi)者線程之間的信息傳遞

基本FIFO隊(duì)列

class Queue.Queue(maxsize=0)

FIFO即First in First Out,先進(jìn)先出。Queue提供了一個(gè)基本的FIFO容器,使用方法很簡單,maxsize是個(gè)整數(shù),指明了隊(duì)列中能存放的數(shù)據(jù)個(gè)數(shù)的上限。一旦達(dá)到上限,插入會(huì)導(dǎo)致阻塞,直到隊(duì)列中的數(shù)據(jù)被消費(fèi)掉。如果maxsize小于或者等于0,隊(duì)列大小沒有限制。

舉個(gè)栗子:

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隊(duì)列

class Queue.LifoQueue(maxsize=0)

LIFO即Last in First Out,后進(jìn)先出。與棧的類似,使用也很簡單,maxsize用法同上

再舉個(gè)栗子:

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類

優(yōu)先級(jí)隊(duì)列

class Queue.PriorityQueue(maxsize=0)

構(gòu)造一個(gè)優(yōu)先隊(duì)列。maxsize用法同上。

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()

結(jié)果

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()

意味著之前入隊(duì)的一個(gè)任務(wù)已經(jīng)完成。由隊(duì)列的消費(fèi)者線程調(diào)用。每一個(gè)get()調(diào)用得到一個(gè)任務(wù),接下來的task_done()調(diào)用告訴隊(duì)列該任務(wù)已經(jīng)處理完畢。

如果當(dāng)前一個(gè)join()正在阻塞,它將在隊(duì)列中的所有任務(wù)都處理完時(shí)恢復(fù)執(zhí)行(即每一個(gè)由put()調(diào)用入隊(duì)的任務(wù)都有一個(gè)對(duì)應(yīng)的task_done()調(diào)用)。

join()

阻塞調(diào)用線程,直到隊(duì)列中的所有任務(wù)被處理掉。

只要有數(shù)據(jù)被加入隊(duì)列,未完成的任務(wù)數(shù)就會(huì)增加。當(dāng)消費(fèi)者線程調(diào)用task_done()(意味著有消費(fèi)者取得任務(wù)并完成任務(wù)),未完成的任務(wù)數(shù)就會(huì)減少。當(dāng)未完成的任務(wù)數(shù)降到0,join()解除阻塞。

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

將item放入隊(duì)列中。

  1. 如果可選的參數(shù)block為True且timeout為空對(duì)象(默認(rèn)的情況,阻塞調(diào)用,無超時(shí))。
  2. 如果timeout是個(gè)正整數(shù),阻塞調(diào)用進(jìn)程最多timeout秒,如果一直無空空間可用,拋出Full異常(帶超時(shí)的阻塞調(diào)用)。
  3. 如果block為False,如果有空閑空間可用將數(shù)據(jù)放入隊(duì)列,否則立即拋出Full異常
  4. 其非阻塞版本為put_nowait等同于put(item, False)

get([block[, timeout]])

從隊(duì)列中移除并返回一個(gè)數(shù)據(jù)。block跟timeout參數(shù)同put方法

其非阻塞方法為`get_nowait()`相當(dāng)與get(False)

empty()

如果隊(duì)列為空,返回True,反之返回False

以上所述是小編給大家介紹的python隊(duì)列Queue詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python中round函數(shù)如何使用

    python中round函數(shù)如何使用

    在本篇文章里小編給大家整理了關(guān)于python的round函數(shù)用法總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線

    Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線

    這篇文章主要為大家介紹了Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解Python核心對(duì)象類型字符串

    詳解Python核心對(duì)象類型字符串

    本篇文章通過理論知識(shí)點(diǎn)給大家講述了Python核心對(duì)象類型字符串的相關(guān)知識(shí)內(nèi)容,對(duì)此有興趣的一起學(xué)習(xí)下。
    2018-02-02
  • 在PyCharm中三步完成PyPy解釋器的配置的方法

    在PyCharm中三步完成PyPy解釋器的配置的方法

    今天小編就為大家分享一篇在PyCharm中三步完成PyPy解釋器的配置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • pycharm遠(yuǎn)程連接服務(wù)器并配置python interpreter的方法

    pycharm遠(yuǎn)程連接服務(wù)器并配置python interpreter的方法

    這篇文章主要介紹了pycharm遠(yuǎn)程連接服務(wù)器并配置python interpreter的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Python 利用pydub庫操作音頻文件的方法

    Python 利用pydub庫操作音頻文件的方法

    今天小編就為大家分享一篇Python 利用pydub庫操作音頻文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中的命令行參數(shù)解析工具之docopt詳解

    Python中的命令行參數(shù)解析工具之docopt詳解

    docopt 是一個(gè)用來解析命令行參數(shù)的工具,當(dāng)想要在 Python 程序后面附加參數(shù)時(shí),就不需要再為此而發(fā)愁了。下面這篇文章主要介紹了Python中命令行參數(shù)解析工具之docopt的相關(guān)資料,介紹的非常詳細(xì),需要的朋友們下面來一起看看吧。
    2017-03-03
  • Python圖像處理庫PIL的ImageDraw模塊介紹詳解

    Python圖像處理庫PIL的ImageDraw模塊介紹詳解

    這篇文章主要介紹了Python圖像處理庫PIL的ImageDraw模塊介紹詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關(guān)信息的方法

    Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關(guān)信息的方法

    這篇文章主要介紹了Python爬取智聯(lián)招聘數(shù)據(jù)分析師崗位相關(guān)信息的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python中的數(shù)據(jù)標(biāo)準(zhǔn)化與反標(biāo)準(zhǔn)化全面指南

    Python中的數(shù)據(jù)標(biāo)準(zhǔn)化與反標(biāo)準(zhǔn)化全面指南

    在數(shù)據(jù)處理和機(jī)器學(xué)習(xí)中,數(shù)據(jù)標(biāo)準(zhǔn)化是一項(xiàng)至關(guān)重要的預(yù)處理步驟,標(biāo)準(zhǔn)化能夠?qū)⒉煌叨群头秶臄?shù)據(jù)轉(zhuǎn)換為相同的標(biāo)準(zhǔn),有助于提高模型的性能和穩(wěn)定性,Python提供了多種庫和函數(shù)來執(zhí)行數(shù)據(jù)標(biāo)準(zhǔn)化和反標(biāo)準(zhǔn)化,如Scikit-learn和TensorFlow
    2024-01-01

最新評(píng)論