小编san*_*dyX的帖子

具有“spawn”上下文的多处理无法访问 Linux 中的共享变量

我必须在 Linux 中使用带有“spawn”上下文的 Process 方法。然后我写了一个示例代码如下:

from multiprocessing import Value
import multiprocessing

class Test(object):
    def __init__(self, m_val):
        print("step1")
        self.m_val = m_val
        print("step2")
        self.m_val_val = m_val.value
        self.prints()
    def prints(self):
        print("self.m_val_val:%d"%self.m_val_val)


def main(m_val):
    t = Test(m_val)

if __name__   == "__main__":
    N = 2
    procs = []
    v = Value("i",10)
    for i in range(0,N):
        proc_i = multiprocessing.get_context("spawn").Process(target=main,args=(v,))
        proc_i.daemon=True
        procs.append(proc_i)
    for i in range(0,N):
        procs[i].start()
    
    for i in range(0,N):
        procs[i].join()
Run Code Online (Sandbox Code Playgroud)

当我在 Linux 中运行这段代码时,它将打印:

step1
step2
step1
step2
Run Code Online (Sandbox Code Playgroud)

而在Windows中,打印内容将是:

step1
step2
self.m_val_val:10
step1
step2
self.m_val_val:10
Run Code Online (Sandbox Code Playgroud)

此外,屏幕上也没有打印任何错误信息。那么,我该如何解决这个问题,即如何在Linux中使用“spawn”上下文时在进程之间使用多处理值?

python python-multiprocessing

6
推荐指数
1
解决办法
1032
查看次数

标签 统计

python ×1

python-multiprocessing ×1