from multiprocessing import Process
# c is a container
p = Process(target = f, args = (c,))
p.start()我假设将c的深层副本传递给函数f,因为浅层副本在新进程的情况下没有意义(新进程无法访问调用进程的数据)。
但是这个深度拷贝是如何定义的呢?在copy.deepcopy()文档中有一个完整的set of notes,所有这些说明也适用于这里吗?multiprocessing文档什么也没说...
发布于 2011-05-13 03:25:23
在创建Process实例时,Python会在幕后发出一个fork()。这将创建一个子进程,其内存空间与其父进程的内存空间完全相同--因此会复制fork时存在的所有内容。
在Linux上,这是通过“写入时复制”来实现的。从fork man page
fork()创建一个子进程,该子进程与父进程的不同之处仅在于其PID和PPID,以及资源利用率设置为0。不继承文件锁定和挂起信号。
在Linux下,fork()是使用写时复制页面实现的,因此它所带来的唯一损失就是复制父进程的页表以及为子进程创建一个独特的任务结构所需的时间和内存。
https://stackoverflow.com/questions/5983159
复制相似问题