ms-windows上的多处理与类UNIX系统的工作方式不同。
类UNIX系统具有
fork
系统调用,它生成当前进程的副本。在具有按写拷贝虚拟内存管理的现代系统中,这甚至不是一个非常昂贵的操作。
这意味着父进程中的全局数据将与子进程共享,直到子进程写入该页,在这种情况下,它将被复制。
问题是微软windows没有
叉
. 它有
CreateProcess
相反。因此,在ms windows上,会发生以下情况:
父进程启动一个新的python解释器进程。子进程将只继承运行process objects run()方法所需的资源。特别是,父进程中不必要的文件描述符和句柄将不会被继承。与使用fork或forkserver相比,使用此方法启动进程相当慢。
因此,由于在函数中引用了全局数据,因此将加载该数据。
但是每个子进程都会分别加载它
.
您可以尝试的是让您的进程使用
mmap
具有
ACCESS_READ
. 我会的
期待
ms-windows内存子系统足够聪明,在同一个文件被多个进程加载的情况下只加载一次数据。