python隊(duì)列基本操作和多線程隊(duì)列
一、隊(duì)列基本操作
from queue import Queue q = Queue(5) ?# 創(chuàng)建一個(gè)容量為5的隊(duì)列。如果給一個(gè)小于0的數(shù),則隊(duì)列為無(wú)限大小。(這是官方的解釋,實(shí)際不是無(wú)限大小,而是跟內(nèi)存有關(guān)) # 存儲(chǔ)數(shù)據(jù) q.put(123) ?# 數(shù)值? q.put('hello world!') ?# 字符串 q.put(['hello', 'world']) ?# 列表 q.put(('hello', 'world')) ?# 元組 q.put({'hello': 'world'}) ?# 字典 # 如果再試圖存儲(chǔ)第六個(gè),則會(huì)發(fā)生阻塞,因?yàn)槿萘恳言O(shè)定為5 # q.put({'hello': 'python'})
取出隊(duì)列中的值:
print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get())
如圖五個(gè)值被依次取出。Queue
隊(duì)列遵循的是先進(jìn)先出。
q.put_nowait()
q.put_nowait()
方法可以無(wú)阻礙地向隊(duì)列中添加內(nèi)容,如果隊(duì)列已滿則會(huì)立即報(bào)錯(cuò),不會(huì)等待(即不會(huì)發(fā)生阻塞)。
q.get_nowait()
q.get_nowait()
方法可以無(wú)阻礙地從隊(duì)列中取出內(nèi)容,如果隊(duì)列是空的則也會(huì)直接報(bào)錯(cuò),不會(huì)等待。
具體使用不再示例。
查看隊(duì)列當(dāng)前大小
q.qsize()
print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize())
如圖,每取出一個(gè)值,隊(duì)列大小就減一。同樣每存入一個(gè)值隊(duì)列大小就會(huì)加一。
q.full()
判斷隊(duì)列是否是滿的。
q.empty()
判斷隊(duì)列是否是空的。
print(q.full()) print(q.get()) print(q.get()) print(q.full()) print(q.empty()) print(q.get()) print(q.get()) print(q.get()) print(q.empty())
二、多線程隊(duì)列
from queue import Queue import threading import time # 存儲(chǔ)值,每隔一秒存儲(chǔ)一個(gè) def set_value(q): ? ? num = 0 ? ? while True: ? ? ? ? q.put(num) ? ? ? ? num += 1 ? ? ? ? time.sleep(1) # 取值,不間斷地取 def get_value(q): ? ? while True: ? ? ? ? print(q.get()) if __name__ == '__main__': ? ? q = Queue(4) ? ? t1 = threading.Thread(target=set_value, args=(q, )) ? ? t2 = threading.Thread(target=get_value, args=(q, )) ? ? t1.start() ? ? t2.start()
程序開(kāi)始運(yùn)行,一邊存儲(chǔ),一邊取值:
此思想應(yīng)用在爬蟲(chóng)上,即一邊訪問(wèn)并獲取數(shù)據(jù),一邊下載數(shù)據(jù)。
到此這篇關(guān)于python隊(duì)列基本操作和多線程隊(duì)列的文章就介紹到這了,更多相關(guān)python隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中內(nèi)置庫(kù)os與sys模塊的詳細(xì)介紹
這篇文章主要介紹了python中內(nèi)置庫(kù)os與sys模塊的詳細(xì)介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08pyinstaller打包多個(gè)py文件和去除cmd黑框的方法
今天小編就為大家分享一篇pyinstaller打包多個(gè)py文件和去除cmd黑框的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06解決Python字典寫(xiě)入文件出行首行有空格的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決Python字典寫(xiě)入文件出行首行有空格的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Python實(shí)戰(zhàn)之夢(mèng)幻鋼琴小游戲的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言編寫(xiě)一款界面化的(Tkinter)電子鋼琴小程序,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-02-02Python matplotlib的使用并自定義colormap的方法
今天小編就為大家分享一篇Python matplotlib的使用并自定義colormap的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python unittest 簡(jiǎn)單實(shí)現(xiàn)參數(shù)化的方法
今天小編就為大家分享一篇Python unittest 簡(jiǎn)單實(shí)現(xiàn)參數(shù)化的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Python asyncore socket客戶端實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python asyncore socket客戶端實(shí)現(xiàn)方法,asyncore庫(kù)是python的一個(gè)標(biāo)準(zhǔn)庫(kù),提供了以異步的方式寫(xiě)入套接字服務(wù)的客戶端和服務(wù)器的基礎(chǔ)結(jié)構(gòu)2022-12-12Python使用ffmpeg合成視頻、音頻的實(shí)現(xiàn)方法
這篇文章主要介紹了Python使用ffmpeg合成視頻、音頻,通過(guò)本文的學(xué)習(xí)能幫助大家了解如何在python中調(diào)用ffmpeg模塊,對(duì)此進(jìn)行音視頻合并,完成視頻合成,需要的朋友可以參考下2022-04-04