例項1:訊息佇列queue,不要將檔案命名為「queue.py」,否則會報異常「importerror: cannot import name 『queue』」
#coding=utf-8
from multiprocessing import queue
q = queue(3)
#初始化乙個queue物件,最多可接收三條put訊息
q.put(
'message-1'
)q.put(
'message-2'
)print
(q.full())
#false,是否滿了
q.put(
'message-3'
)print
(q.full())
#true
#因為訊息佇列已滿,下面的try都會丟擲異常,第乙個try會等待2秒後再丟擲異常,第二個try會立即丟擲異常
try:
q.put(
'message-4'
,true,2
)except
:print
('except1,訊息佇列已滿,現有訊息數量:%s'
%q.qsize())
try:
q.put_nowait(
'message-4'
)except
:print
('except2,訊息佇列已滿,現有訊息數量:%s'
%q.qsize())
#判斷佇列是否已滿
ifnot q.full():
q.put_nowait(
'message-4'
)#讀取訊息時,先判斷訊息佇列是否為空,在讀取
ifnot q.empty():
for i in
range
(q.qsize())
:print
(q.get())
#q.get會阻塞,q.get_nowait()不阻塞,但會拋異常
false例項二:通過process程序間通訊true
except1,訊息佇列已滿,現有訊息數量:3
except2,訊息佇列已滿,現有訊息數量:3
message-1
message-2
message-3
from multiprocessing import process,queue
import os,time,random
#寫資料
defwrite
(q):
for value in
['a'
,'b'
,'c']:
print
('put %s to queue...'
%value)
q.put(value)
time.sleep(random.random())
#讀資料
defread
(q):
while
true:if
not q.empty():
value = q.get(
true
)print
('get %s from queue...'
%value)
time.sleep(random.random())
else
:break
if __name__ ==
'__main__'
:print
('start...'
) q = queue(
)#父程序的queue傳遞給子程序
pw = process(target=write,args=
(q,)
) pr = process(target=read,args=
(q,)
)#寫程序
pw.start(
) pw.join(
)#讀程序
pr.start(
) pr.join(
)print
('done...'
)
start…例項三:通過manager程序間通訊put a to queue…
put b to queue…
put c to queue…
get a from queue…
get b from queue…
get c from queue…
done…
from multiprocessing import manager,pool
import os,time,random
#寫資料
defwriter
(q):
print
('writer啟動(%s),父程序為(%s)'
%(os.getpid(
),os.getppid())
)for i in
'chaoge'
: q.put(i)
#讀資料
defreader
(q):
print
('reader啟動(%s),父程序為(%s)'
%(os.getpid(
),os.getppid())
)for i in
range
(q.qsize())
:print
('reader 從queue獲取到訊息:%s'
%q.get())
if __name__ ==
'__main__'
:print
('(%s) start'
%os.getpid())
q = manager(
).queue(
)#使用manager中的queue來初始化
po=pool(
)#使用阻塞模式建立程序,這樣就不需要再reader中使用死迴圈了,可以等write執行完成後,再用reader
po.(writer,
(q,)
) po.
(reader,
(q,)
)#寫程序
po.close(
) po.join(
)print
('(%s) end'
%os.getpid(
))
(7720) startwriter啟動(7284),父程序為(7720)
reader啟動(8712),父程序為(7720)
reader 從queue獲取到訊息:c
reader 從queue獲取到訊息:h
reader 從queue獲取到訊息:a
reader 從queue獲取到訊息:o
reader 從queue獲取到訊息:g
reader 從queue獲取到訊息:e
(7720) end
Queue訊息佇列實戰python
網上很關於queue的教程都只是個簡單的demo,看完也還是不知道怎麼在實戰中運用,下面的 是在用flask開發自動化測試平台時,用到的有關queue的 首先,在使用者介面所在的user.py檔案中匯入queue庫,並例項化為q 同時新建乙個thread子執行緒,這個執行緒提供功能是消費執行緒,可以...
Python程序間通訊Queue訊息佇列用法分析
程序間通訊 queue process之間有時需要通訊,作業系統提供了很多機制來實現程序間的通訊。1.queue的使用 可以使用multiprocessing模組的queue實現多程序之間的資料傳遞,queue本身是乙個訊息列隊程式,首先用乙個小例項來演示下queue的工作原理 如下 coding ...
queue之 單向訊息佇列
import queue q queue.queue 建立乙個單項佇列 qsize 檢視這個單項佇列元素的個數 empty 與 clear功能是一樣的 full 是用來檢視這個佇列是否填滿了,佇列可以定義佇列的個數,所以可以通過full來檢視佇列是否填滿了 put 插入 資料 get 取資料 imp...