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系统调用+