gpt4 book ai didi

python - Python 多处理是否从父级复制所有模块?

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:29 24 4
gpt4 key购买 nike

我注意到我可以访问子进程函数/目标之外的子进程中的函数和模块。所以我想知道当我在 python 中创建子进程时,它会复制当前进程中的所有内容吗?为什么我可以访问子目标之外的函数和导入模块?

from multiprocessing import Process, Pipe

def test1():
return "hello"

def simpleChildProcess( childPipe ):
# simpleChildProcess can access test1 function
foo = test1()
childPipe.send( foo )

parentPipe, childPipe = Pipe()
childProcess = Process( target=simpleChildProcess, args=(childPipe,) )

childProcess.start()

print "Pipe Contains: %s" % parentPipe.recv()

最佳答案

在类 Unix 操作系统上,multiprocessing.Process uses os.fork产生新的进程。fork 创建一个新进程,该进程是父进程的副本, fork 进程从调用 fork 的位置恢复。

由于 Windows 缺少 forkmultiprocessing.Process 启动一个新的 Python 进程并导入调用模块。在 Windows 上,对 Process 的调用必须在 if __name__ == '__main__' 内,以防止每次调用模块时重复调用 Process是进口的。 (即使在 Unix 上,包含 if __name__ == '__main__': 也是一种很好的做法,以防止您的代码导致进程失控。

因此,子进程可以访问由调用模块定义的函数和模块,直到调用 Process 的点(在Unix)或导入调用模块之后(在 Windows 的情况下)。

关于python - Python 多处理是否从父级复制所有模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57558784/

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