一、佇列
這三種佇列都是執行緒安全的,不會出現多個執行緒搶占同乙個資源或資料的情況
1fifoimport queue #
不需要通過threading模組裡面匯入,直接import queue就可以了,這是python自帶的
2 q=queue.queue()
3 q.put('
first')
4 q.put('
second')
5 q.put('
third')
6#q.put_nowait() #沒有資料就報錯,可以通過try來搞
7print
(q.get())
8print
(q.get())
9print
(q.get())10#
q.get_nowait() #沒有資料就報錯,可以通過try來搞
11'''
12結果(先進先出):
13first
14second
15third
16'''
1先進後出import
queue
23 q=queue.lifoqueue() #
佇列,類似於棧,棧我們提過嗎,是不是先進後出的順序啊
4 q.put('
first')
5 q.put('
second')
6 q.put('
third')
7#q.put_nowait()89
(q.get())
10print
(q.get())
11print
(q.get())12#
q.get_nowait()
13'''
14結果(後進先出):
15third
16second
17first
18'''
1優先順序佇列import
queue
23 q=queue.priorityqueue()4#
put進入乙個元組,元組的第乙個元素是優先順序(通常是數字,也可以是非數字之間的比較),數字越小優先順序越高
5 q.put((-10,'a'
))6 q.put((-5,'
a')) #
負數也可以7#
q.put((20,'ws')) #如果兩個值的優先順序一樣,那麼按照後面的值的acsii碼順序來排序,如果字串第乙個數元素相同,比較第二個元素的acsii碼順序8#
q.put((20,'wd'))9#
q.put((20,)) #typeerror: unorderable types: dict() < dict() 不能是字典10#
q.put((20,('w',1))) #優先順序相同的兩個資料,他們後面的值必須是相同的資料型別才能比較,可以是元祖,也是通過元素的ascii碼順序來排序
1112 q.put((20,'b'
))13 q.put((20,'a'
))14 q.put((0,'b'
))15 q.put((30,'c'
))16
17print
(q.get())
18print
(q.get())
19print
(q.get())
20print
(q.get())
21print
(q.get())
22print
(q.get())
23'''
24結果(數字越小優先順序越高,優先順序高的優先出隊):
25'''
二、訊號量
訊號量:控制同時能夠進入鎖內去執行**的執行緒數量(程序數量),維護了乙個計數器,剛開始建立訊號量的時候假如設定的是4個房間,進入一次acquire就減1 ,出來乙個就+1,如果計數器為0,那麼其他的任務等待,這樣其他的任務和正在執行的任務是乙個同步的狀態,而進入acquire裡面去執行的那4個任務是非同步執行的.
併發程式設計之併發佇列
jdk 中提供了一系列場景的併發安全佇列。總的來說,按照實現方式的不同可分為阻塞佇列和非阻塞佇列,前者使用鎖實現,而後者則使用cas 非阻塞演算法實現。1 非阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue是無界非阻塞佇列,內部使用單項鍊表實現 其中有...
python 併發程式設計 佇列
1.佇列 from multiprocessing import queue q queue 5 建立佇列物件,佇列大小為5,佇列中只能存放5個元素 q.put 1 往佇列中新增元素 q.put 2 q.put 3 q.put 4 q.put 5 print q.full 檢測佇列是否滿了 prin...
執行緒安全15 併發佇列
併發無阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue無阻塞 無鎖 高效能 無界 執行緒安全,效能優於blockingqueue 不允許null值 併發阻塞佇列 arrayblockingqueue 基於陣列實現的阻塞有界佇列 建立時可指定長度,內部實...