python多处理参数:深拷贝?
问题描述:
from multiprocessing import Process
# c is a container
p = Process(target = f, args = (c,))
p.start()
我假设的c
深拷贝传递给函数f
因为浅拷贝会建立一个新的进程的情况下没有意义(新进程没有从调用进程访问数据)。python多处理参数:深拷贝?
这是怎么回事深层副本定义?这里有一整set of notes的copy.deepcopy()
文档中,做所有这些说明适用于这里? multiprocessing
文档中没有提及任何内容...
答
当您创建Process
实例时,Python会发出一个fork()
。这将创建一个子进程,其内存空间是其母公司的精确拷贝 - 所以一切都存在于叉的时间被复制。
在Linux上,这是通过“写入时复制”造高效。从fork man page:
叉()创建一个子进程 仅从 在其PID与PPID,以及这样的事实,即 资源利用被设置为0。 文件锁定和未决父进程的不同之信号不会被遗传。
在Linux下,fork()的实现 使用写入时复制页,所以只能 点球,这招是复制 家长的页表,并创建一个 唯一需要的时间和 内存孩子的任务结构。
+1。请注意,Windows使用与fork()不同的机制,但效果相似。 – 2011-05-12 19:33:18
这是正确的,但必须指出,没有任何东西被复制是不正确的。 Python的垃圾收集器需要维护引用计数。虽然(我认为每个进程4kb),但是这种内存开销可以忽略不计。 – 2015-09-20 19:54:21