多进程共享数据,真正的通信Manager

Posted alex_huang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多进程共享数据,真正的通信Manager相关的知识,希望对你有一定的参考价值。

Managers

A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.

A manager returned by Manager() will support types listdictNamespaceLockRLockSemaphoreBoundedSemaphoreConditionEventBarrierQueueValue and Array. For example,

 

from multiprocessing import Process,Manager
import threading,time,os

def sub(d,l):
    d[os.getpid()] = os.getpid()
    l.append(os.getppid())
    print(l)
    #print(d)
if __name__ == ‘__main__‘:
    with Manager() as M: #with..as的作用是把Manager()生成一个别名M,并只有在with内有效
        d = M.dict()    #用了with,下面也可以不用。
        l = Manager().list(range(5))
        p_list = []    #这个列表保存生成的多个进程 ,方便促一join()。等待全部完成,
        for i in range(10):
            t = Process(target=sub,args=(d,l))
            t.start()
            p_list.append(t)
        for i in p_list:
            i.join()
        print(d,l)

  ...

 

以上是关于多进程共享数据,真正的通信Manager的主要内容,如果未能解决你的问题,请参考以下文章

python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

进程中的Manager(),实现多进程的数据共享与传递

Python之路(第三十九篇)管道进程间数据共享Manager

多进程-Pipe和Manager数据共享和传递

进程线程之间的通信

Python学习第21篇:进程池以及回调函数