python多进程:fork模式和spawn模式
-
fork模式
1.仅unix系统支持,并且是unix系统的默认模式.
2.使用该模式创建子进程的时候,会复制父进程的全部变量,支持传参(任意类型)给子进程,但是不会复制父进程的线程.
3.该模式相当于将父进程的内存复制一份用于创建子进程.但是由于不复制线程的特点,当父进程存在多线程的时候,可能会带来安全问题(复制了线程锁,而没有复制解锁的线程过去,容易触发死锁).同时,由于不管用不用得上的资源都将被复制到子进程,所以可能会带来"膨胀"问题,占用更多的内存.
4.由于该模式是复制父进程的内存,所以启动方式更快.
5.该模式可以在任意地方创建子进程. -
spawn模式
1.unix,windows,mac都支持,并且是windows和mac的默认启用模式.其中windows只支持该模式.
2.该模式只能在main方法下开启多进程.
3.使用该模式创建子进程的时候,会重新生成一份与入口方法相关的变量,所以在父进程中存在,而子进程中未创建的变量,在子进程内是不存在的.可以简单理解为,创建子进程的时候,会重新执行一次main方法之外的代码.
4.该模式支持传参到子进程,但是不支持传递某些特殊资源到子进程,如:文件对象,文件句柄,线程锁等.这类资源需要子进程自主创建.
5.这种模式启动更慢,但是可能会更节省内存.搭配共享内存使用可能会更佳. -
拓展:forkserver模式
仅部分unix系统支持,内部使用os.fork创建子进程.
文档信息不足,不建议使用.