![](/img/trans.png)
[英]python multiprocessing child process cannot access to global variable
[英]Child process not inheriting Python global variable on Windows
我知道子進程在 fork/spawn 之后不會看到所做的更改,並且 Windows 進程不會繼承不使用共享內存的全局變量。 但是我遇到的情況是,孩子們無法看到在 fork/spawn 之前對共享內存中的全局變量所做的更改。
簡單演示:
from multiprocessing import Process, Value
global foo
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 上的子進程也可以看到更改?
這里的問題是您的子進程創建了一個新的共享值,而不是使用父進程創建的共享值。 您的父進程需要顯式地將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 來測試這個。)
Windows 上的子進程不能繼承全局變量,無論這些全局變量是否被初始化為multiprocessing.Value
實例。 multiprocessing.Value
不會改變子級重新執行您的文件的事實,並且重新執行Value
構造不會使用父級分配的共享資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.