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)
相关文章
相关标签/搜索