在Python中进行多处理时,是否会在每个进程中复制全局变量?

时间:2017-09-30 20:22:43

标签: python global-variables python-multiprocessing

我们通过runInParallel调用某些函数来使用并行处理,您将在此答案中找到:https://stackoverflow.com/a/7207336/720484

所有这些函数都应该可以访问他们应该读取的单个全局变量 这个全局变量实际上是一个类的实例。此实例包含成员变量/属性,并且所有进程都读取和写入。

然而事情并没有像这样发生。似乎复制了对象(类实例),并且其属性在每个进程上都是独立的。因此,如果一个进程更改了该值,则对另一个进程的变量不可见。

这是预期的行为吗?

如何克服它?

谢谢

1 个答案:

答案 0 :(得分:3)

所有子进程将在从父进程分叉时继承该实例。在fork之后不会看到对子节点和父节点中的实例所做的任何更改。

这是流程在Linux中的工作方式 - 每个流程都有自己的内存,不受其他流程的影响(除非您有意共享它)。它不是特定于Python的。

您正在寻找的内容通常称为IPC(进程间通信)。进程可以通过多种方式相互通信。您可能想要使用管道或共享内存。

在Python中,请阅读:https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes