1. 程式人生 > >Python 程序,程序間通過佇列共享資料,佇列Queue

Python 程序,程序間通過佇列共享資料,佇列Queue

佇列中的資料是放在記憶體中的,可以通過分散式快取redis優化佇列。

 

demo.py(程序通過佇列共享資料):

import multiprocessing


def download_from_web(q):
    """下載資料"""
    # 模擬從網上下載的資料
    data = [11, 22, 33, 44]

    # 向佇列中寫入資料
    for temp in data:
        q.put(temp)  # 佇列中寫資料,佇列滿了會阻塞。  put_nowait() 佇列滿了會拋異常

    print("---下載器已經下載完了資料並且存入到佇列中----")


def analysis_data(q):
    """資料處理"""
    waitting_analysis_data = list()
    # 從佇列中獲取資料
    while True:
        data = q.get()  # 佇列中讀資料,佇列空了會阻塞。  get_nowait() 佇列空了會拋異常
        waitting_analysis_data.append(data)

        if q.empty():  # 佇列是否為空。  q.full() 佇列是否滿了。
            break

    # 模擬資料處理
    print(waitting_analysis_data)

def main():
    # 1. 建立一個佇列 (先進先出)
    q = multiprocessing.Queue(10)  # 最多放10個數據。  如果不指定長度,預設最大(和硬體相關)

    # 2. 建立多個程序,將佇列的引用當做實參進行傳遞
    p1 = multiprocessing.Process(target=download_from_web, args=(q,))
    p2 = multiprocessing.Process(target=analysis_data, args=(q,))
    p1.start()
    p2.start()


if __name__ == "__main__":
    main()