子进程在Windows上不继承Python全局变量

问题描述 投票:0回答:1

我知道子进程在派生/产生后将看不到更改,并且Windows进程不会继承不使用共享内存的全局变量。但是我所遇到的情况是,孩子无法看到在fork / spawn之前对共享内存中的全局变量所做的更改。

简单演示:

from multiprocessing import Process, Value
global foo
with foo.get_lock():
  foo = Value('i',1)
def printfoo():
  global foo 
  with foo.get_lock():
    print(foo.value)
if __name__ == '__main__':
  with foo.get_lock():
    foo.value = 2
  Process(target=printfoo).start()

[在Linux和MacOS上,这显示期望的2。在Windows上,它显示1,即使在调用Process之前对全局值进行了修改。如何在Windows上的子进程中也看到更改?

python windows global python-multiprocessing
1个回答
0
投票

这里的问题是您的子进程创建一个new共享值,而不是使用父级创建的共享值。您的父进程需要将Value显式发送给子进程,例如,作为目标函数的参数:

from multiprocessing import Process, Value

def use_shared_value(val):
    val.value = 2

if __name__ == '__main__':
    val = Value('i', 1)
    p = Process(target=use_shared_value, args=(val,))
    p.start()
    p.join()
    print(val.value)

(不幸的是,我没有安装Windows Python对此进行测试。)

© www.soinside.com 2019 - 2024. All rights reserved.