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

Are global variables get replicated in each process when doing multiprocessing in Python?

我们通过 runInParallel 调用一些函数来使用并行处理,您将在这个答案中找到这些函数:

所有这些函数都应该可以访问它们应该读取的单个全局变量。
这个全局变量实际上是一个class的实例。这个实例包含一个成员 variable/attribute 和所有读取和写入它的进程。

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

这是预期的行为吗?

如何克服?

谢谢

所有子进程将在从父进程派生时继承该实例。对子实例和父实例所做的任何更改都不会在分叉后看到。

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

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

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