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模块)

  • 相关阅读:
    [ISSUE]SyntaxWarning: name 'xxx' is assigned to before global declaration
    memcached 安装
    gulp 初体验
    gitcafe 使用hexo搭建博客
    sulime-text 3 安装以及使用
    media queries 媒体查询使用
    css3之@font-face---再也不用被迫使用web安全字体了
    前端的一些疑问总结01
    bootstrap 笔记01
    自定义表单样式之checkbox和radio
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8687061.html
Copyright © 2011-2022 走看看