Python並行編程(八):多進程對象交換之隊列實現生產者-消費者模型

進程的對象交換

當咱們進行並行應用的開發須要數據交換時,multiprocess模塊有兩個通訊通道用來管理對象的交換,即對隊列和管道。就像以前咱們在線程中的使用同樣,能夠利用隊列進行數據交換,它在線程和進程裏面都是安全的,任何可序列化對象均可以經過隊列進行交換。python

生產者-消費者模型

咱們一樣能夠利用進程中的隊列實現該模型:安全

import multiprocessing
import random
import time
from multiprocessing import Queue

# 定義一個進程的隊列
def producer(q):
    while True:
        time.sleep(2)
        # 假定商品序號
        item = random.randint(1, 10)
        print('process producer product goods:{}'.format(item))
        q.put(item)
        time.sleep(2)

def consumer(q):
    while True:
        # 即隊列中仍然有商品就繼續消費,不然等待
        if not q.empty():
            # 消費商品:
            item = q.get()
            print('process cusumer get goods:{}'.format(item))
            time.sleep(1)
        else:
            print('wait for goods...')
            time.sleep(1)
 

if __name__ == "__main__":
    q = Queue()

    process_producer = multiprocessing.Process(target=producer, args=(q,))
    process_consumer = multiprocessing.Process(target=consumer, args=(q, ))

    process_producer.start()
    process_consumer.start()

    process_producer.join()
    process_consumer.join()

複製代碼

運行截圖以下: dom

運行結果
咱們能夠看見運行結果,即消費者老是飢餓的等待消費商品,並且消費者也確實是每等待一下子就能夠消費到生產者生產的商品,即隊列確實可以在進程中傳遞數據,而在使用的時候須要注意把須要把定義的隊列做爲參數傳遞到須要交換同步數據的進程們中實現真正的在多進程中傳遞數據。
相關文章
相關標籤/搜索