Python单例模式在多进程中的应用

6

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

5个回答

8
最好指定一个特定的进程拥有该实例并专门为其提供服务;任何其他需要访问该实例的进程都通过向拥有进程发送消息(使用多进程模块提供的队列或其他IPC机制进行消息传递)来获取它,并通过类似的机制获得答案。

5
整个进程的重点在于拥有不同的地址空间。如果您想要在进程之间共享信息,必须使用一些进程间通信手段。

2

1
在Python 2.6中,multiprocessing模块有一个Value对象,用于在进程之间共享状态。他们提供了一个代码示例,可以帮助你理解如何以这种方式共享状态,并且在编写单例类时可以使用这种方法。

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]
各种数据结构可供选择,但您需要父进程将共享对象传递给子对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接