python 併發程式設計 佇列

2022-05-11 15:21:32 字數 3121 閱讀 1985

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()) #

檢測佇列是否滿了~

print(q.get()) #

取出佇列中的值

print

(q.get())

print

(q.get())

print

(q.get())

print

(q.get())

print(q.empty()) #

檢測佇列是否為空

結果:

如果佇列中的值滿了,繼續用put()方法往佇列中新增元素,則會阻塞,

如果隊列為空,繼續用get()方法取佇列中的元素,同樣也會阻塞。 

get_nowait()方法:

返回q中的乙個項,如果q為空此方法則阻塞,知道佇列中有專案可以用為止。

用於控制阻塞行為,預設為true,如果設定為false,將引發queue.empty異常。

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()) #

檢測佇列是否滿了~

print(q.get()) #

取出佇列中的值

print

(q.get())

print

(q.get())

print

(q.get())

print

(q.get())

print(q.empty()) #

檢測隊列為空

q.get_nowait() #

返回q中的乙個項,如果q為空此方法則阻塞,知道佇列中有專案可以用為止。

#用於控制阻塞行為,預設為true,如果設定為false,將引發queue.empty異常。

結果:

用while迴圈和異常處理實現即使佇列中沒有元素,也不阻塞,而是等待佇列中有了元素之後,再獲取元素。

from multiprocessing import

queue

import

time

q = queue(5) #

建立佇列物件,佇列大小為5,佇列中只能存放5個元素

q.put(1) #

往佇列中新增元素

q.put(2)

q.put(3)

q.put(4)

q.put(5)

print(q.full()) #

檢測佇列是否滿了~

print(q.get()) #

取出佇列中的值

print

(q.get())

print

(q.get())

print

(q.get())

print

(q.get())

print(q.empty()) #

檢測隊列為空

while

true:

try:

q.get_nowait()

#返回q中的乙個項,如果q為空此方法則阻塞,知道佇列中有專案可以用為止。

#用於控制阻塞行為,預設為true,如果設定為false,將引發queue.empty異常。

except

:

print('

佇列已空!

') #

用異常處理解決異常

time.sleep(1) #

等1秒之後,再獲取佇列中的元素

結果:

通過佇列在兩個子程序之間通訊。

from multiprocessing import

queue,process

class

myclass(process):

def__init__

(self,q):

super().

__init__

() self.q =q

defrun(self):

self.q.put(

'hello

') #

將資料新增到佇列中

class

consume(process):

def__init__

(self,q):

super().

__init__

() self.q =q

defrun(self):

print(self.q.get()) #

將資料從佇列中取出

if__name__ == '

__main__':

q =queue()

p = myclass(q) #

生產資料子程序

p.start()

c = consume(q) #

消耗資料子程序

c.start()

結果:

併發程式設計之併發佇列

jdk 中提供了一系列場景的併發安全佇列。總的來說,按照實現方式的不同可分為阻塞佇列和非阻塞佇列,前者使用鎖實現,而後者則使用cas 非阻塞演算法實現。1 非阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue是無界非阻塞佇列,內部使用單項鍊表實現 其中有...

python併發程式設計 佇列MQ的學習

overview totals 所有佇列的阻塞情況 ready 待消費的訊息總數 unacked 待應答的訊息總數 total 總數 ready unacked publish producter pub訊息的速率。publisher confirm broker確認pub訊息的速率。deliver...

併發程式設計 阻塞佇列BlockingQueue

在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為出隊。因為佇列只允許在一端插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出 fifo first in first out 線性表。1 支援阻塞的插入方法 意思是當佇列滿時,佇列會阻塞插入元素的執行...