python singleton进入多处理

时间:2009-07-10 14:27:34

标签: python multiprocessing

如何编写代码以在进程中共享“单一”类的相同实例?

5 个答案:

答案 0 :(得分:5)

流程的重点是拥有不同的地址空间。如果要在进程之间共享信息,则必须使用interprocess communication的某些方法。

答案 1 :(得分:5)

最好的是将一个特定的流程指定为拥有该实例并专注于它;需要访问该实例的任何其他进程通过队列(由多处理模块提供)或其他IPC机制向消息传递发送消息来获取消息,并通过类似的机制获得答案。

答案 2 :(得分:2)

在Python 2.6中,multiprocessing模块有一个用于sharing state between processesValue对象。他们有一个代码示例,可以让您了解如何以这种方式共享状态,并且您可以在编写单例类时使用此方法。

答案 3 :(得分:1)

我认为您不能在进程之间共享实例,但是您可以让实例访问共享内存:http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes来控制它的状态,如果这真的是您想要做的事情。

但是,正如其他答案中所述,使用队列可能更容易实现您想要的效果。

答案 4 :(得分:1)

您还可以使用multiprocessing.manager个可共享数据类型之一

import multiprocessing as mp
manager = mp.Manager()
shared_list = manager.list()

def worker1(l):
    l.append(1)

def worker2(l):
    l.append(2)

process1 = mp.Process(target=worker1, args=[shared_list])
process2 = mp.Process(target=worker2, args=[shared_list])

process1.start()
process2.start()
process1.join()
process2.join()

print shared_list

输出如下:

[1,2]

有一个variety of data structures,但您需要父进程将共享对象传递给子对象。