zoukankan      html  css  js  c++  java
  • PYTHON——多进程:进程间通信和数据共享

    1、采用Queue队列通信

    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()

    2、采用Pipe管道通信

    '''
    由PIPER()返回的两个连接对象表示管道的两端。
    每个连接对象都有SeNe()和ReCVE()方法(除其他之外)。
    注意,如果两个进程(或线程)试图同时从管道的同一端读取或写入数据,
    那么管道中的数据可能会损坏。
    当然,在使用管道的不同端部的过程中不存在腐败风险。
    '''
    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())  # 主进程接收 prints "[42, None, 'hello']"
        p.join()

    3、采用Manager管理器对象通信

      Manager用于管理数据共享

    '''
    Manager()返回的管理器对象控制保存Python对象的服务器进程,
    并允许其他进程使用代理操作它们。
    Manager()返回的管理器将支持类型:list,dict, Namespace, Lock, RLock,
    Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array
    '''
    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 类似 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()
    
            print(d)
            print(l)
  • 相关阅读:
    让弹幕给 PPD 生个孩子
    circle_clock 简单canvas实现圆弧时钟
    JS练习实例--编写经典小游戏俄罗斯方块
    就这样,我把4000张美女和帅哥照片下载本地了
    移动端开发的兼容问题(自我总结篇)
    css两栏布局、圣杯布局、双飞翼布局
    浅析Node与Element
    那是我在夕阳下的code
    flex布局中父容器属性部分演示效果
    关于CDN那些事
  • 原文地址:https://www.cnblogs.com/chenhaiming/p/9919394.html
Copyright © 2011-2022 走看看