【问题标题】:Are global variables get replicated in each process when doing multiprocessing in Python?在 Python 中进行多处理时,是否会在每个进程中复制全局变量?
【发布时间】:2017-09-30 20:22:42
【问题描述】:

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

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

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

这是预期的行为吗?

如何克服?

谢谢

【问题讨论】:

  • 不解释就投反对票等于欺负

标签: python global-variables python-multiprocessing


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2019-12-12
    • 2018-05-31
    • 2012-06-28
    • 2023-03-15
    • 1970-01-01
    • 2021-02-24
    • 2018-10-27
    相关资源
    最近更新 更多