多重处理-Manager.list()不是真正的共享内存

时间:2019-06-17 18:27:39

标签: python multiprocessing

在python文档中,在进程之间共享数据下,Manager.list()和Manager.dict()方法看起来很有希望。

尚不清楚的是它们是否提供真正的内存共享,或者列表/字典是否仍被腌制到单独的进程中。根据我的性能指标,我猜酸洗仍在进行。

服务器进程

  

Manager()返回的管理器对象控制服务器进程,   持有Python对象并允许其他进程操纵它们   使用代理。由Manager()返回的经理将支持类型   列表,字典,命名空间,锁,RLock,信号量,BoundedSemaphore,   条件,事件,队列,值和数组。例如,来自   多处理导入流程,经理

def f(d, l):
    d[1] = '1'
    d['2'] = 2
    d[0.25] = None
    l.reverse()

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    l = manager.list(range(10))

    p = Process(target=f, args=(d, l))
    p.start()
    p.join()

    print d
    print l
will print
{0.25: None, 1: '1', '2': 2}
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
  

服务器进程管理器比使用共享内存更灵活   对象,因为可以使它们支持任意对象类型。   同样,单个经理可以由不同的进程共享   网络上的计算机。但是,它们比使用共享的速度慢   记忆。

我相信我可能会使用ctypes,但是不确定是否可以容纳所有从Oracle返回的类型。

0 个答案:

没有答案