python 中的多处理命名空间

multiprocessing namespace in python

import multiprocessing

def everyM01D000200(ns):

    print(ns.a) # '123c' 

if __name__ == '__main__':
    mgr = multiprocessing.Manager()
    ns = mgr.Namespace()

    ns.a = '123c'

    print(ns.a)
    p1 = multiprocessing.Process(target=everyM01D000200, args=(ns,))
    p1.start()

我原以为它会打印为“123c”,但出现了错误。 FileNotFoundError: [WinError 2] 找不到指定的文件。

也许从函数中取命名空间的变量时有不同的过程。

我认为问题在于您的主进程在加入子进程之前终止,即等待它完成,并且 SyncManager 进程服务代理方法调用创建的任何托管对象,例如NameSpace 您创建的实例已终止。 FileNotFoundError异常是由于代理对象与SyncManager进程之间通信所用的multiprocessing.Pipe中断(SyncManager端的连接已关闭)。

import multiprocessing

def everyM01D000200(ns):

    print(ns.a) # '123c'

if __name__ == '__main__':
    mgr = multiprocessing.Manager()
    ns = mgr.Namespace()

    ns.a = '123c'

    print(ns.a)
    p1 = multiprocessing.Process(target=everyM01D000200, args=(ns,))
    p1.start()
    # Wait for subprocess completion:
    p1.join()

打印:

123c
123c