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

Thu*_*ack 4 python multiprocessing

我注意到我可以访问子进程函数/目标之外的子进程中的函数和模块。所以我想知道当我在 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()
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

在类 Unix 操作系统上,multiprocessing.Process 用于os.fork生成新进程。 fork创建一个新进程,它是父进程的副本,并且分叉进程从fork被调用的点恢复。

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

因此,子进程访问已被调用模块定义的功能和模块到一点,其中Process有被称为(在Unix的情况下)或调用模块的输入之后(在Windows的情况下)。