python程序之間的通訊方式---------訊息佇列
就是A程序往C佇列裡放訊息,一次放一個,一次放一個訊息,程序B作為接收端,一次從佇列裡拿出一個訊息,一次
拿出一個訊息,這樣看起來和管道基本差不多,但實際上是python當中,他的函式為我們做了一個同化,佇列裡的
函式更加豐富,並且內部資料的組織結構不一樣
3.建立佇列
1.#在記憶體中開闢一個佇列模型,用來存放訊息,任何擁有佇列物件的程序都可以進行訊息存放和取出
multiprocessing-------> Queue
2.介面函式
1.q = Queue(maxsize=0) #建立訊息佇列物件
引數:
maxsize 預設為0,表示訊息佇列可以存放的訊息由系統自動分配的空間而定,能存放多少個訊息,由系統自動分配
>0正整數 表示訊息佇列中最多可以存放多少條訊息(訊息個數,不看位元組大小)
返回值:
訊息佇列物件
2.q.put(‘xxx’)向訊息佇列存放一條訊息,當訊息佇列滿的時候會阻塞,存放的訊息型別可以是數字,列表,字串等等
3.q.full()判斷佇列是否滿了,滿了為True,否則為False
4.q.qsize()檢視訊息佇列中訊息的數量
5.q.get()獲取訊息,每次獲取一條,當訊息佇列為空的時候,就發生阻塞
6.q.empty()判斷訊息佇列是否為空,為空是True,不為空返回False
7.put,get中block引數和timeout引數
block預設為True,表示兩個函式都是阻塞函式
block引數為False時,表示不阻塞
timeout 當block設定為True的時候表示超時等待時間,你可以給timeout設定時間
3.事例
1.判斷佇列是否滿了
from multiprocessing import Queue
#建立訊息佇列,最多有三條
q = Queue(3)
#存放訊息
i = 0
while True:
#q.full判斷佇列是不是滿了
if q.full():
print('訊息佇列已經滿了')
break
q.put('博主真帥'+ str(i))
i += 1
print('當前佇列一共有%d條訊息'%q.qsize())
列印結果為:
訊息佇列已經滿了
當前佇列一共有3條訊息
2.獲取訊息
from multiprocessing import Queue
#建立訊息佇列,最多有三條
q = Queue(3)
#存放訊息
i = 0
while True:
#q.full判斷佇列是不是滿了
if q.full():
print('訊息佇列已經滿了')
break
q.put('博主真帥'+ str(i))
i += 1
print('當前佇列一共有%d條訊息'%q.qsize())
#獲取訊息
for i in range(q.qsize()):
print('獲取訊息%s'%q.get())
#列印結果:
訊息佇列已經滿了
當前佇列一共有3條訊息
獲取訊息博主真帥0
獲取訊息博主真帥1
獲取訊息博主真帥2
3.訊息佇列程序間的通訊:
from multiprocessing import Queue,Process
from time import sleep