queue模組部分api說明
新建乙個佇列,返回兩個為空的列表組成的元組
是否是佇列,通過判斷元組是否由兩個列表組成
是否為空佇列,通過判斷兩個列表是否為空
佇列長度,通過獲取兩個列表長度相加實現
佇列轉為列表,由out列表拼接反轉後的in列表實現
列表轉為佇列,呼叫了f2r
f2r([
])->
;f2r
([_]
=f)->
;f2r
([x,y]
)->
;f2r
(list)
->
= lists:
split
(length
(list) div 2+1
, list)
,.
其中分幾種情況
1、列表為空,則返回空佇列
2、列表只有乙個元素時放入in,兩個元素時,按序放入out、in
3、元素數量》=3,則將列表根據列表長度進行分割,分割成in、out列表
將元素放在佇列尾部,存元素x時將元素放進in列表中([x|in]),當out為空時則將in替換out,這樣效率會更高,因為佇列是先進先出的,當out不是空列表取out列表第乙個元素即可
與queue:in類似,不過是將元素放在佇列頭部。關於從佇列中獲取元素還有get、get_r、peek、peek_r這幾個方法都是從佇列中獲取元素,但是不會返回新的佇列
我在原始碼上加了注釋,由以下原始碼,很清晰的可以看出佇列是怎麼取出元素的
-spec out
(q1 :
:queue
(item)
)->
, q2 :
:queue
(item)}|
.out
(=q)
->
;out()
->,}
;out()
->
[v|out]
= lists:
reverse
(in,
),%% 反轉後下次取元素直接取out的頭元素
,};out
() when is_list
(in)
->
%% 取完out為空時,呼叫r2f()
,作用是將in的一半元素擷取出來反轉形成out,下次取元素就很方便
,r2f
(in)};
out(
) when is_list
(in)
->
%% 直接從out中取出頭元素,它一定是最早進去的
,};out
(q)->
erlang:
error
(badarg,
[q])
.
queue:out_r(queue) 與queue:out類似,不過取出來的是尾部元素
佇列是否包含此元素,通過判斷兩個列表是否包含此元素實現
刪除佇列第乙個元素並返回新的佇列
queue:drop_r(queue) -> queue | badarg 則是刪除佇列最後乙個元素並返回新的佇列
將佇列反轉,實現方式是queue = , newqueue =
合併兩個佇列
如果需求是需要按照順序先進先出的取出資料,用佇列是很高效的
Python 佇列模組 Queue
佇列queue模組 管道 subprocess stdin stdout stderr 佇列 管道 鎖 佇列 先進先出 堆疊 先進後出 from multiprocessing import queue 建立乙個佇列 q queue 5 括號內可以傳數字 標示生成的佇列最大可以同時存放的資料量 往佇...
同步佇列 Queue模組解析
queue模組解決了生產者 消費者問題,在多執行緒程式設計中進行執行緒通訊的時候尤其有用,queue類封裝了加鎖解鎖的過程。在queue模組中有三種不同的佇列類,區別是不同佇列取出資料的順序不同。在fifo佇列中,先存進去的資料最先取出來。而在lifo佇列中,最後存進去的資料最取出來。在加權佇列中,...
Python 原始碼分析 queue 佇列模組
起步 queue 模組提供適用於多執行緒程式設計的先進先出 fifo 資料結構。因為它是執行緒安全的,所以多個執行緒很輕鬆地使用同乙個例項。原始碼分析 先從初始化的函式來看 從這初始化函式能得到哪些資訊呢?首先,佇列是可以設定其容量大小的,並且具體的底層存放元素的它使用了collections.de...