04進程間的通信---=Queue,Pipe,進程間數據的共享---Manager

from multiprocessing import Queue, Process
import threading,os


def con(process_queue):
    print("打印子進程id:",os.getpid())
    process_queue.put("添加的數據")


if __name__ == "__main__":
    # 主進程建立一個隊列
    print("主進程id", os.getpid())
    q = Queue()
    # 啓動一個子進程對隊列進行更改,須要將對象在初始化的時候傳過去
    p = Process(target=con, args=(q,))
    p.start()

    # 主進程從隊列中獲取數據
    print(q.get())
    p.join()# 等待子進程介紹,再退出程序

  

from multiprocessing import Process, Pipe


def pip_child(conn):
    conn.send("這個從子進程發出1")
    conn.send("這個從子進程發出2")
    print(conn.recv())
    conn.close()


if __name__ == "__main__":
    # 創建進程間的通信管道
    parent_conn, child__conn = Pipe()
    # 建立子進程的時候傳遞一端給子進程,執行子進程
    p = Process(target=pip_child, args=(child__conn,))
    p.start()
    input("子進程已發送數據,按鍵繼續")
    # 父進程開始接受數據
    # while len(parent_conn.recv())>=0:
    #     print(parent_conn.recv())
    print(parent_conn.recv())
    print(parent_conn.recv())
    parent_conn.send("from main process.")

  

from multiprocessing import Process, Manager
import os


def change(d, l):
    """    
    :param d:須要更改的字段 
    :param l: 進程列表
    :return: 
    """
    # 進程id
    d[os.getpid()] = os.getpid()
    l.append(os.getpid())
    print(d,l)


if __name__ == "__main__":
    with Manager() as manager:
        # 主進程生成一個能夠在多個進程間修改的字典
        d = manager.dict()
        # 主進程生成一個列表,能夠在多個進程間進行修改
        l = manager.list(range(5))

        # 存儲全部的進程
        p_list = []
        for i in range(10):
            p = Process(target=change, args=(d, l))
            p.start()
            p_list.append(p)
        #等待執行結果
        for  i in p_list:
            i.join()
        print("----------打印最後結果----------")
        print(d)
        print(l)
相關文章
相關標籤/搜索