如何编写代码以在进程中共享“单一”类的相同实例?
答案 0 :(得分:5)
流程的重点是拥有不同的地址空间。如果要在进程之间共享信息,则必须使用interprocess communication的某些方法。
答案 1 :(得分:5)
最好的是将一个特定的流程指定为拥有该实例并专注于它;需要访问该实例的任何其他进程通过队列(由多处理模块提供)或其他IPC机制向消息传递发送消息来获取消息,并通过类似的机制获得答案。
答案 2 :(得分:2)
在Python 2.6中,multiprocessing
模块有一个用于sharing state between processes的Value
对象。他们有一个代码示例,可以让您了解如何以这种方式共享状态,并且您可以在编写单例类时使用此方法。
答案 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,但您需要父进程将共享对象传递给子对象。