Python多处理过程与独立Python虚拟机

Python多处理过程与独立Python虚拟机,python,multiprocessing,virtual-machine,Python,Multiprocessing,Virtual Machine,除了多处理模块在连接进程与通信资源时的易用性之外,使用multiprocessing生成多个进程与使用subprocess启动单独的Python虚拟机相比,还有其他区别吗?如果忽略任何通信问题(即,如果单独的Python VM之间不通信,或者仅通过显式建立的其他机制进行通信),则没有其他实质性差异。(我相信在某些条件下,多处理,尤其是类Unix平台,可以使用效率更高的fork,而不是多处理总是隐含的fork-exec对,但当只涉及几个进程时,这并不是“实质性的”[[IOW,启动时的性能差异不会对

除了
多处理
模块在连接进程与通信资源时的易用性之外,使用
multiprocessing
生成多个进程与使用
subprocess
启动单独的Python虚拟机相比,还有其他区别吗?

如果忽略任何通信问题(即,如果单独的Python VM之间不通信,或者仅通过显式建立的其他机制进行通信),则没有其他实质性差异。(我相信在某些条件下,
多处理
,尤其是类Unix平台,可以使用效率更高的
fork
,而不是
多处理
总是隐含的fork-exec对,但当只涉及几个进程时,这并不是“实质性的”[[IOW,启动时的性能差异不会对整个系统的性能产生重大影响]])。

在Posix平台上,
多处理
原语实质上是一个
os.fork()
。这意味着在多处理中生成一个进程时,已经导入/初始化的代码在子进程中仍然如此

如果您有很多事情要初始化,然后每个子流程实质上对这些初始化对象执行操作(副本),那么这可能是一个好处,但如果您在子流程中运行的事情完全不相关,那么这并没有多大帮助

在类unix平台上使用
多处理
,也会对资源(如文件句柄、套接字等)产生影响

同时,在使用
子进程
时,每次
打开一个新进程时,您都会创建一个全新的程序/解释器。这意味着它们之间的共享内存可能会减少,但也意味着您可以打开一个完全独立的程序,或打开同一程序的一个新入口点


在Windows上,
multiprocessing
subprocess
之间的差异较小,因为Windows不提供
fork()

Microsoft在高端版本的Windows中提供了
fork()
。有关详细信息,请参阅我的。@PiotrDobrogost,但我不相信“multiprocessing”从Python 3.4开始,您可以选择在*nix系统上使用spawn系统调用+