除了在使用 multiprocessing
模块时连接进程与通信资源更加易用之外,使用 multiprocessing
产生多个进程与使用 subprocess
启动单独的 Python VM 之间还有其他的区别吗?
除了在使用 multiprocessing
模块时连接进程与通信资源更加易用之外,使用 multiprocessing
产生多个进程与使用 subprocess
启动单独的 Python VM 之间还有其他的区别吗?
multiprocessing
基本上是对os.fork()
的封装。这意味着在你生成一个进程时,导入/初始化的代码在子进程中仍然存在。multiprocessing
还涉及到文件句柄、套接字等资源的问题。subprocess
时,每次 Popen
新进程都会创建一个全新的程序/解释器。这意味着它们之间可以共享的内存比较少,但也意味着你可以在一个完全独立的程序或同一程序的新入口点上 Popen。multiprocessing
和 subprocess
的差别较小,因为Windows不提供fork()
。
fork()
。有关详细信息,请参见我的答案。 - Piotr Dobrogost