欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python中的隊列方式有哪些-創(chuàng)新互聯(lián)

這篇文章給大家介紹Python中的隊列方式有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,恒山企業(yè)網(wǎng)站建設,恒山品牌網(wǎng)站建設,網(wǎng)站定制,恒山網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,恒山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

隊列是一種只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

在Python文檔中搜索隊列(queue)會發(fā)現(xiàn),Python標準庫中包含了四種隊列,分別是queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque。

collections.deque

deque是雙端隊列(double-ended queue)的縮寫,由于兩端都能編輯,deque既可以用來實現(xiàn)棧(stack)也可以用來實現(xiàn)隊列(queue)。

deque支持豐富的操作方法,主要方法如圖:

Python中的隊列方式有哪些

相比于list實現(xiàn)的隊列,deque實現(xiàn)擁有更低的時間和空間復雜度。list實現(xiàn)在出隊(pop)和插入(insert)時的空間復雜度大約為O(n),deque在出隊(pop)和入隊(append)時的時間復雜度是O(1)。

deque也支持in操作符,可以使用如下寫法:

q = collections.deque([1, 2, 3, 4])
print(5 in q) # False
print(1 in q) # True

deque還封裝了順逆時針的旋轉的方法:rotate。

# 順時針
q = collections.deque([1, 2, 3, 4])
q.rotate(1)
print(q) # [4, 1, 2, 3]
q.rotate(1)
print(q) # [3, 4, 1, 2]
# 逆時針
q = collections.deque([1, 2, 3, 4])
q.rotate(-1)
print(q) # [2, 3, 4, 1]
q.rotate(-1)
print(q) # [3, 4, 1, 2]

線程安全方面,collections.deque中的append()、pop()等方法都是原子操作,所以是GIL保護下的線程安全方法。

static PyObject *
deque_append(dequeobject *deque, PyObject *item) { 
 Py_INCREF(item);
 if (deque_append_internal(deque, item, deque->maxlen) < 0) 
 return NULL;
 Py_RETURN_NONE;
}

通過dis方法可以看到,append是原子操作(一行字節(jié)碼)。

Python中的隊列方式有哪些

綜上,collections.deque是一個可以方便實現(xiàn)隊列的數(shù)據(jù)結構,具有線程安全的特性,并且有很高的性能。

queue.Queue & asyncio.Queue

queue.Queue和asyncio.Queue都是支持多生產者、多消費者的隊列,基于collections.deque,他們都提供了Queue(FIFO隊列)、PriorityQueue(優(yōu)先級隊列)、LifoQueue(LIFO隊列),接口方面也相同。

區(qū)別在于queue.Queue適用于多線程的場景,asyncio.Queue適用于協(xié)程場景下的通信,由于asyncio的加成,queue.Queue下的阻塞接口在asyncio.Queue中則是以返回協(xié)程對象的方式執(zhí)行,具體差異如下表:

Python中的隊列方式有哪些

multiprocessing.Queue

multiprocessing提供了三種隊列,分別是Queue、SimpleQueue、JoinableQueue。

Python中的隊列方式有哪些

multiprocessing.Queue既是線程安全也是進程安全的,相當于queue.Queue的多進程克隆版。和threading.Queue很像,multiprocessing.Queue支持put和get操作,底層結構是multiprocessing.Pipe。

multiprocessing.Queue底層是基于Pipe構建的,但是數(shù)據(jù)傳遞時并不是直接寫入Pipe,而是寫入進程本地buffer,通過一個feeder線程寫入底層Pipe,這樣做是為了實現(xiàn)超時控制和非阻塞put/get,所以Queue提供了join_thread、cancel_join_thread、close函數(shù)來控制feeder的行為,close函數(shù)用來關閉feeder線程、join_thread用來join feeder線程,cancel_join_thread用來在控制在進程退出時,不自動join feeder線程,使用cancel_join_thread有可能導致部分數(shù)據(jù)沒有被feeder寫入Pipe而導致的數(shù)據(jù)丟失。

和threading.Queue不同的是,multiprocessing.Queue默認不支持join()和task_done操作,這兩個支持需要使用mp.JoinableQueue對象。

SimpleQueue是一個簡化的隊列,去掉了Queue中的buffer,沒有了使用Queue可能出現(xiàn)的問題,但是put和get方法都是阻塞的并且沒有超時控制。

關于Python中的隊列方式有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章標題:Python中的隊列方式有哪些-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://chinadenli.net/article28/dcpccp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、響應式網(wǎng)站微信小程序、Google、外貿建站商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設
欧美日不卡无在线一区| 国产传媒精品视频一区| 福利专区 久久精品午夜| 一区二区在线激情视频| 高清不卡一卡二卡区在线| 99久久人妻精品免费一区| 五月天丁香婷婷狠狠爱| 91亚洲人人在字幕国产| 免费一级欧美大片免费看| av在线免费观看一区二区三区 | 国产91麻豆精品成人区| 亚洲欧美一二区日韩高清在线| 护士又紧又深又湿又爽的视频| 在线免费国产一区二区三区 | 日本少妇三级三级三级| 视频一区二区 国产精品| 激情中文字幕在线观看| 精品人妻一区二区三区四区久久| 好吊日在线观看免费视频| 久久国产成人精品国产成人亚洲| 成年男女午夜久久久精品| 日韩一区中文免费视频| 丰满熟女少妇一区二区三区 | 激情少妇一区二区三区| 国产成人精品一区二三区在线观看| 亚洲中文字幕在线乱码av| 青青操精品视频在线观看| 久久免费精品拍拍一区二区| 丁香七月啪啪激情综合| 高清国产日韩欧美熟女| 亚洲黄香蕉视频免费看| 欧美一区二区三区99| 黄片免费播放一区二区| 日本av在线不卡一区| 福利视频一区二区在线| 亚洲中文字幕人妻系列| 日本婷婷色大香蕉视频在线观看 | 日韩18一区二区三区| 高清亚洲精品中文字幕乱码| 成人国产激情福利久久| 黄色国产一区二区三区|