51 併發程式設計 執行緒 佇列

2022-04-29 12:30:07 字數 2133 閱讀 6699

一、佇列

這三種佇列都是執行緒安全的,不會出現多個執行緒搶占同乙個資源或資料的情況

1

import 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'''

fifo

1

import

queue

23 q=queue.lifoqueue() #

佇列,類似於棧,棧我們提過嗎,是不是先進後出的順序啊

4 q.put('

first')

5 q.put('

second')

6 q.put('

third')

7#q.put_nowait()89

print

(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 基於陣列實現的阻塞有界佇列 建立時可指定長度,內部實...