Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python单例到多处理_Python_Multiprocessing - Fatal编程技术网

python单例到多处理

python单例到多处理,python,multiprocessing,Python,Multiprocessing,如何编写代码在进程之间共享同一个“singletonic”类实例?进程的全部要点是拥有不同的地址空间。如果您想在进程之间共享信息,您必须使用某种方法。最好是指定一个特定进程作为该实例的所有者并专用于该实例;任何其他需要访问该实例的进程都可以通过队列(由多处理模块提供)或其他IPC消息传递机制将消息发送给拥有该实例的进程来获得该实例,并通过类似机制返回答案。我认为您无法在进程之间共享该实例,但您可以让实例访问共享内存:如果您真的想这样做,则可以控制它的状态 但是,正如其他答案中所述,使用队列可能更

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

进程的全部要点是拥有不同的地址空间。如果您想在进程之间共享信息,您必须使用某种方法。

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

我认为您无法在进程之间共享该实例,但您可以让实例访问共享内存:如果您真的想这样做,则可以控制它的状态


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

在Python 2.6中,
多处理
模块使用了一个
对象。它们有一个代码示例,可以让您了解如何以这种方式共享状态,您可以在编写单例类时使用这种方法。

您还可以使用一种
多处理.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]

有一个提供,但您需要父进程将共享对象传递给子对象