gpt4 book ai didi

python - 使用多处理池在衍生进程中更改主进程中的全局变量

转载 作者:行者123 更新时间:2023-12-04 13:24:18 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Python Multiprocessing - number of process

(1 个回答)


上个月关闭。




我的示例代码如下:

from multiprocessing import Pool
GLOBAL_VAR = 0

def try_change_global_var(notused):
global GLOBAL_VAR
print(f"My own GLOBAL_VAR in current process starts as: {GLOBAL_VAR}")
GLOBAL_VAR = 1
print("I tried to change GLOBAL_VAR to 1")
return "change"


if __name__ == '__main__':
p1 = Pool(4)
result = p1.map(try_change_global_var, range(4))
print(result)
print(f"GLOBAL_VAR in main process is still: {GLOBAL_VAR}")
p1.close()
我读到每个生成的 Python 进程都有自己的全局变量,但是如果您查看我的控制台输出,似乎所有 4 个生成的进程都在访问相同的变量,因为它立即从 0 更改为 1 并保持不变1. 4个进程结束后,main中的全局变量当然还是0。
My own GLOBAL_VAR in current process starts as: 0
I tried to change GLOBAL_VAR to 1
My own GLOBAL_VAR in current process starts as: 1
I tried to change GLOBAL_VAR to 1
My own GLOBAL_VAR in current process starts as: 1
I tried to change GLOBAL_VAR to 1
My own GLOBAL_VAR in current process starts as: 1
I tried to change GLOBAL_VAR to 1
['change', 'change', 'change', 'change']
GLOBAL_VAR in main process is still: 0
我可以根据被调用函数的返回列表在 main 中更改它,但这不是我想要的。我想从生成的进程共享内存并更改主进程中的全局变量。
我无法通过 multiprocessing.Value 获得一个可以工作的玩具示例并希望得到一些帮助。我发现的示例没有使用 Pool,并且能够将多个参数传递给它们在并行进程中运行的函数。
操作系统:Windows 10
python 3.9.5

最佳答案

这完全按预期工作。当您生成一个进程时,您正在制作当前环境的副本,并将其提供给新进程。该流程所做的更改发生在该流程中,并且仅在该流程中发生。
所以每个流程都在变化 自己的 GLOBAL_VAR到 1,但该值完全独立于 GLOBAL_VAR在主进程中。如果您需要跨多个线程使用变量,Python 提供了“共享变量”,但它们有些昂贵。 ( multiprocessing.Value )

关于python - 使用多处理池在衍生进程中更改主进程中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69458097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com