zoukankan      html  css  js  c++  java
  • 043进程通信和数据共享

    内容:进程通信1、Pipes;2、Queue,以及例子和练习

    不同进程的通信有两种,1、是Pipes,2、是Queue    ,一般不用Pipes
    ##########################################
    1、Queue实现进程通信
    通过创建线程的时候传递数据

    print(os.getppid())    # os.getppid()获取父进程的id
    print(os.getpid())    # os.getpid()或者该进程的id
    
    from multiprocessing import Process,Queue
    def f(q,n):
        q.put([42,n,'hello'])
    if __name__ == '__main__':
        q = Queue()
        p_list = []
        for i in range(3):
            p = Process(target=f,args=(q,i))
            p_list.append(p)
            p.start()
        print(q.get())
        print(q.get())
        print(q.get())
        for i in p_list:
            i.join()

    信息在Queue里面通信,这里可以看出,需要的信息通过进程加入到 q 里面后,就可以通过 q 操作。

    ##########################################################################

    2、Pipes实现进程通信
    步骤:1)建立Pipe对象,拿到两个进程通信对象
    2)通过参数传递,把子进程通信对象发送给子进程
    3)通过send和recv通信

    from multiprocessing import Process,Pipe
    def f(conn):
        conn.send([42,None,'hello'])
        conn.close()
    
    if __name__ == '__main__':
        parent_conn, child_conn = Pipe()      # 获取父子通信的通信对象
        p = Process(target=f,args=(child_conn,)) 
        p.start()
        print(parent_conn.recv())
        p.join()

    ###################################################
    数据共享

    from multiprocessing import Process,Manager
    def f(d,l,n):
        d[n] = '1'
        d['2'] = 2
        d[0.25] = None
        l.append(n)
        print(l)
    
    if __name__ == '__main__':
        with Manager() as manager:        # with open() as f    ==    f = open()    
            d = manager.dict()
            l = manager.list(range(5))
            p_list = []
        for i in range(10):
            p = Process(target=f,args=(d,l,i))
            p.start()
            p_list.append(p)
    
        for res in p_list:
            res.join()
    练习

    线程和进程池
    http://www.cnblogs.com/yuanchenqi/articles/5733873.html
    ——多线程(threading模块)

  • 相关阅读:
    BM&EXCRT
    杨丰磊
    poj3613 Cow Relays
    详解KMP算法
    信息学作文
    恐怖的奴隶主(bob)
    玩具(toy)
    杯子 (glass)
    P3916 图的遍历
    《上帝给我一个任务,叫我牵一只蜗牛去散步》
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8687061.html
Copyright © 2011-2022 走看看