隊列

Python的Queue模塊中提供了同步的、線程安全的隊列類,包括:FIFO(先入先出)隊列QueueLIFO(后入先出)隊列LifoQueue,優(yōu)先級隊列PriorityQueue,這些隊列都實現(xiàn)了鎖道批,能夠在多線程中直接使用∪肴觯可以使用隊列來實現(xiàn)線程間的同步隆豹。初始化Queue()對象時(例如:q=Queue()),若括號中沒有指定最大可接收的消息數(shù)量茅逮,或數(shù)量為負值璃赡,那么就代表可接受的消息數(shù)量沒有上限。

一:隊列的方法

Queue.qsize():返回當前隊列包含的消息數(shù)量献雅;
Queue.empty() 如果隊列為空碉考,返回True,反之False
Queue.full() 如果隊列滿了,返回True,反之False
Queue.get()獲取隊列挺身,timeout等待時間

# 如果block表示是否等待侯谁,如果timeout表示是否等待, 
get(self, block=True, timeout=None)

Queue.put(item) 寫入隊列

# 如果block表示是否等待章钾,如果timeout表示是否等待墙贱, 
put(self, item, block=True, timeout=None)
from queue import Queue,LifoQueue,PriorityQueue

# 創(chuàng)建一個隊列對,3是maxsize參數(shù)叮姑,控制隊列長度
q = Queue(3)

# 往隊列中添加數(shù)據(jù)的方法:put
# 如果隊列已滿塞绿,則會進入堵塞狀態(tài)(等待)
# 參數(shù)block:如果隊列已滿是否等待;timeout:等待的超時時間
q.put("111")
q.put("222")
q.put("333")
# q.put("444")
# 獲取對列中數(shù)據(jù)的方法:get
# 如果隊列為空晓殊,則會進入堵塞狀態(tài)(等待)
# 參數(shù)block:如果隊列為空是否等待府寒;timeout:等待的超時時間

print("獲取對列里的數(shù)據(jù):",q.get())
q.put("444")
print("獲取對列里的數(shù)據(jù):",q.get())
print("獲取對列里的數(shù)據(jù):",q.get())

print("----end-----")

# full:判斷隊列是否已滿
print("隊列是否已滿:",q.full())

# empty:判斷隊列是否為空
print("隊列是否為空:",q.empty())

# 獲取隊列中的數(shù)據(jù)量
print("獲取隊列里的數(shù)據(jù)量:",q.qsize())
image.png

Queue.task_done() 在完成一項工作之后魁衙,使用Queue.task_done()方法可以向隊列發(fā)送一個信號,表示該任務執(zhí)行完畢
Queue.join() 實際上意味著等到隊列中所有的任務(數(shù)據(jù))執(zhí)行完畢之后株搔,再往下剖淀,否則一直等待
注意點:join()是判斷的依據(jù),不單單指的是隊列中沒有數(shù)據(jù)邪狞,數(shù)據(jù)get出去之后祷蝌,要使用task_done()向隊列發(fā)送一個信號,表示該任務執(zhí)行(數(shù)據(jù)使用)完畢

import time,random
from queue import Queue
from threading import Thread


q = Queue()
for i in range(10):
    q.put("數(shù)據(jù){}".format(i))

def work(data):
    """
    線程執(zhí)行的公眾函數(shù)
    :param data:
    :return:
    """
    for i in range(1):
        time.sleep(random.randint(1,3))
    print("數(shù)據(jù)data:{}處理完畢".format(data))
    # 給隊列發(fā)送一個信號帆卓,告訴對象這條數(shù)據(jù)處理完畢(執(zhí)行完了一個任務)
    q.task_done()

def main():
    """使用隊列等待的方法"""
    for i in range(10):
        data = q.get()
        t1 = Thread(target=work,args=(data,))
        t1.start()
    # 等待隊列中所有的任務執(zhí)行完畢(數(shù)據(jù)處理完畢)
    q.join()
    print("等待線程中所有的數(shù)據(jù)處理完畢再往下執(zhí)行---")


main()

二、后入先出隊列LifoQueue

from queue import Queue,LifoQueue,PriorityQueue

# ---------后入先出隊列-----------------------
# 創(chuàng)建一個后入先出隊列,3是maxsize參數(shù)米丘,控制隊列長度
q = LifoQueue(3)

# 往隊列中添加數(shù)據(jù)的方法:put
q.put("111")
q.put("222")
q.put("333")
# 獲取對列中數(shù)據(jù)的方法:get

print("獲取對列里的數(shù)據(jù):",q.get())
q.put("444")
print("獲取對列里的數(shù)據(jù):",q.get())
print("獲取對列里的數(shù)據(jù):",q.get())
image.png

三剑令、優(yōu)先級隊列:PriorityQueue

from queue import Queue,LifoQueue,PriorityQueue
q = PriorityQueue(3)

# 往隊列中添加數(shù)據(jù)的方法:put
# tuple第一個參數(shù)為優(yōu)先級,數(shù)值越小先出
q.put((99,"111"))
q.put((6,"222"))
q.put((28,"333"))
# 獲取對列中數(shù)據(jù)的方法:get

print("獲取對列里的數(shù)據(jù):",q.get())
print("獲取對列里的數(shù)據(jù):",q.get())
print("獲取對列里的數(shù)據(jù):",q.get())
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拄查,一起剝皮案震驚了整個濱河市吁津,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖碍脏,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梭依,死亡現(xiàn)場離奇詭異,居然都是意外死亡典尾,警方通過查閱死者的電腦和手機役拴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钾埂,“玉大人河闰,你說我怎么就攤上這事∪熳希” “怎么了姜性?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長髓考。 經常有香客問我部念,道長,這世上最難降的妖魔是什么氨菇? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任印机,我火速辦了婚禮,結果婚禮上门驾,老公的妹妹穿的比我還像新娘射赛。我一直安慰自己,他們只是感情好奶是,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布楣责。 她就那樣靜靜地躺著,像睡著了一般聂沙。 火紅的嫁衣襯著肌膚如雪秆麸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天及汉,我揣著相機與錄音沮趣,去河邊找鬼。 笑死坷随,一個胖子當著我的面吹牛房铭,可吹牛的內容都是我干的。 我是一名探鬼主播温眉,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼缸匪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了类溢?” 一聲冷哼從身側響起凌蔬,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后砂心,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懈词,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年辩诞,在試婚紗的時候發(fā)現(xiàn)自己被綠了坎弯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡躁倒,死狀恐怖荞怒,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情秧秉,我是刑警寧澤褐桌,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站象迎,受9級特大地震影響荧嵌,放射性物質發(fā)生泄漏。R本人自食惡果不足惜砾淌,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一啦撮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汪厨,春花似錦赃春、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衷戈,卻和暖如春狭吼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殖妇。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工刁笙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谦趣。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓疲吸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔚润。 傳聞我的和親對象是個殘疾皇子磅氨,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容