python多处理参数:深层复制?

max*_*max 17 python deep-copy multiprocessing

from multiprocessing import Process
# c is a container
p = Process(target = f, args = (c,))
p.start()
Run Code Online (Sandbox Code Playgroud)

我假设将深层副本c传递给函数,f因为浅层副本在新进程的情况下没有任何意义(新进程无法访问调用进程中的数据).

但这个深层副本是如何定义的?这里有一整集的笔记copy.deepcopy()的文档,做所有这些说明适用于这里?该multiprocessing文件说什么?

sam*_*ias 15

当你创建一个Process实例时,Python会发布一个fork().这将创建一个子进程,其内存空间是其父级的精确副本 - 因此复制fork时存在的所有内容.

在Linux上,通过"写入时复制"可以提高效率.从fork手册页:

fork()创建一个子进程,该进程仅在其PID和PPID中与父进程不同,并且资源利用率设置为0.事实上,不继承文件锁和挂起信号.

在Linux下,fork()是使用copy-on-write页面实现的,因此它所产生的唯一损失是复制父页面表所需的时间和内存,以及为子项创建唯一的任务结构.