jld*_*ont 16 python virtual-machine multiprocessing
除了使用multiprocessing通信资源连接进程时模块的易用性,multiprocessing与使用subprocess启动单独的Python VM 相比,生成多个进程之间是否存在任何其他差异?
Cra*_*ast 21
在Posix平台上,multiprocessing原语基本上包装了一个os.fork().这意味着,在多处理中生成进程时,已导入/初始化的代码在子进程中仍然存在.
如果你有很多事情需要初始化,然后每个子进程基本上对那些初始化对象的(副本)执行操作,这可能是一个福音,但如果你在子进程中运行的东西是完全不相关的,那么这并不是所有有用的.
在multiprocessing类似unix的平台上也存在对文件句柄,套接字等资源的影响.
同时,在使用时subprocess,每次Popen进行新过程时都会创建一个全新的程序/解释器.这意味着它们之间可以有更少的共享内存,但这也意味着您可以将Popen转换为完全独立的程序,或者进入同一程序的新入口点.
在Windows中,差异之间少multiprocessing和subprocess,因为Windows不提供fork().
如果您忽略任何通信问题(即,如果单独的 Python VM 之间不进行通信,或者仅通过其他明确建立的机制进行通信),则没有其他实质性差异。(我相信multiprocessing,在某些条件下——尤其是类 Unix 平台——可以使用更高效的,fork而不是总是暗示的 fork-exec 对multiprocessing——但是当只涉及几个进程时,这不是“实质性的”[[ IOW,启动时的性能差异不会对整个系统的性能产生重大影响]])。
| 归档时间: |
|
| 查看次数: |
4213 次 |
| 最近记录: |