Queue:共享消息隊列
Queue 模塊來提供進(jìn)程間通信的機制,從而讓線程之間可以互相分享數(shù)據(jù)。
queue隊列
有三種模式
-
Queue(maxsize=0)
- 創(chuàng)建一個先入先出的隊列,沒有給定最大值即無限隊列
-
LifoQueue(maxsize=0)
- 創(chuàng)建一個先入后出的隊列铭污,沒有給定最大值即無限隊列
-
PriorityQueue(maxsize=0)
- 創(chuàng)建一個優(yōu)先級隊列,沒有給定最大值即無限隊列
屬性與異常
- 異常
Empty 當(dāng)對空隊列調(diào)用get()方法時拋出異常
Full 當(dāng)對已滿的隊列調(diào)用put()方法時拋出異常
- 屬性
qsize() 返回隊列大小(由于返回時隊列大小可能被其他線程修改饶氏,所以該值為近似值)
empty() 如果隊列為空,則返回True有勾;否則疹启,返回False
full() 如果隊列已滿,則返回True蔼卡;否則喊崖,返回False
put(item, block=Ture, timeout=None) 將item 放入隊列。如果block 為True(默認(rèn))且timeout 為None雇逞,則在有可用空間之前阻塞荤懂;如果timeout 為正值,則最多阻塞timeout 秒喝峦;如果block 為False势誊,則拋出Empty 異常
put_nowait(item) 和put(item, False)相同,即非阻塞
get (block=True, timeout=None) 從隊列中取得元素。如果給定了block(非0)谣蠢,則一直阻塞到有可用的元素為止
get_nowait() 和get(False)相同粟耻,即非阻塞
- 生產(chǎn)者消費者模型
from multiprocessing import Process, Queue
def consumer(q):
'''
消費者
'''
for i in range(10):
res = q.get()
print('取出來%s'%res)
def producer(q):
'''
生產(chǎn)者
'''
for i in range(10):
res = q.put(i+10) # 成功則會返回none
print('放進(jìn)去:%s'%res)
def main():
q = Queue()
process_producer = Process(target=producer, args=(q,))
process_consumer = Process(target=consumer, args=(q,))
process_producer.start()
process_consumer.start()
process_producer.join()
process_consumer.join()
if __name__ == '__main__':
main()