gpt4 book ai didi

Python多处理: not using separate memory space?

转载 作者:行者123 更新时间:2023-11-28 21:33:14 25 4
gpt4 key购买 nike

据我了解,multiprocessing 在 Linux 上使用 fork,这意味着 multiprocessing 创建的每个进程都有自己的内存空间以及所做的任何更改内不会影响其他forked进程。

但是我遇到了这个相当奇怪的情况:

import multiprocessing

i = -1

def change(j):
global i
print(i, end=" ") # should print -1
i = j

with multiprocessing.Pool(20) as p:
p.map(change, range(20))

print(i) # should print -1

我认为这个程序会打印 21 -1,因为 multiprocessing 创建了 20 个独立的子进程,其内存空间不共享,这意味着行 i = j不会影响任何其他进程中i的值;因此在打印时i = -1

但是,该程序实际上打印了 -1 和 0 到 19 之间的随机数字的混合。

示例:

-1 -1 -1 -1 -1 4 -1 5 -1 6 -1 8 -1 -1 14 -1 -1 12 -1 -1 -1

所以我的问题是,为什么我没有得到恰好 21 -1

最佳答案

Python 3.2 引入 maxtasksperchild .

Maxtasksperchild 是工作进程在退出并被新的工作进程替换以释放未使用的资源之前可以完成的任务数。默认的 maxtasksperchild 是 None,这意味着工作进程将与池一样长。

import multiprocessing

i = -1

def change(j):
global i
print(i, end=" ") # should print -1
i = j

if __name__ == '__main__':
with multiprocessing.Pool(20, maxtasksperchild=1) as p:
p.map(change, range(20))
print(i) # should print -1

关于Python多处理: not using separate memory space?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54848720/

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