multiprocessing的三种启动流程

multiprocessing支持三种启动流程,分别为‘spawn’,‘fork’,“forkserver”

spawn

父进程启动一个新的Python解释器, 子进程将只继承运行run()方法所需的资源。不继承父进程不必要的文件描述符和句柄(一种特殊的只能指针)。与使用fork或forkserver相比,使用此方法启动进程相当慢。在Unix和Windows上可用,Windows上为默认。

fork

父进程使用os.fork()来分叉Python解释器,子进程开始时,与父进程实际上是相同的。父进程所有资源都由子进程继承。这不能保证多线程的安全问题

forkserver

当程序启动并选择forkserver start方法时,将启动服务器进程。从那时起,每当需要新进程时,父进程连接到服务器,并请求它分配一个新进程。叉服务器进程是单线程的,因此它可以安全使用os.fork()。没有不必要的资源被继承。

调用

如果要选择启动方法,必须在主模块中使用set_start_method方法,如:

if __name__ == '__main__':
     multiprocessing.set_start_method('spawn')    
posted @ 2022-06-27 18:29  小Aer  阅读(40)  评论(0编辑  收藏  举报  来源