更新的 class 属性未反映在多处理函数中

Upated class attribute not getting reflected in multiprocessing function

我在 windows

上有一个 Python 3.6.6 多处理函数 运行
import multiprocessing as mp

class Foo:
    def __new__(cls):
        return None
    name = 'apple'

    @staticmethod
    def worker():
        print(f'Inside worker => {Foo.name}')

    @staticmethod
    def caller():
        for _ in range(3):
            p = mp.Process(target=Foo.worker)
            p.start()
            p.join()


if __name__ == '__main__':
    Foo.name ='ball'
    Foo.caller() # worker prints apple
    Foo.worker() # prints ball

根据我的理解,在函数 worker 中 class 属性 name 的值应该 ball 但实际上它是 apple.

我正在寻找对此的解释,但找不到任何解释。提前致谢。

您的程序有 4 个进程:1 个主进程和 3 个子进程。您修改 main 进程中的 class 属性,但任何新生成的进程将使用 class 定义中的值再次加载 class。

线程和进程的主要区别在于共享内存。如果您使用 Threads 而不是 Processes,您将看到它将使用修改后的 class 定义:

p = threading.Thread(target=Foo.worker)