python 多进程系列 (二) 多进程模式

发布于 更新于
本文目录
  1. 一、fork模式【unix】
  2. 二、spawn模式【unix、win】
  3. 三、forkserver模式【unix】

技术文章测试开发

1、支持文件对象和线程锁等传参 2、拷贝父进程的所有东西,当做子线程去执行,父进程有的在子进程都有 3、拷贝锁:如果锁在外面是锁定状态,拷贝到子进程的时候锁依然是锁定状态,但是是被子进程的主进程获取到的

一、fork模式【unix】

1、支持文件对象和线程锁等传参 2、拷贝父进程的所有东西,当做子线程去执行,父进程有的在子进程都有 3、拷贝锁:如果锁在外面是锁定状态,拷贝到子进程的时候锁依然是锁定状态,但是是被子进程的主进程获取到的

import multiprocessing
def demo():
    #在子进程中打印test_list
    #这个是创建子线程的时候,从父进程中复制过来的
    print(test_list)
if __name__ == '__main__':
    #设置创建子进程模式为fork模式,windows下不支持
    multiprocessing.set_start_method("fork")
    #主进程的test_list
    test_list = []
    p1 = multiprocessing.Process(target=demo)
    p1.start()
    #打印主线程中的test_list
    print(test_list)

二、spawn模式【unix、win】

1、 不支持文件对象和线程锁等传参 2、在内部创建python解释器,让该解释器再去运行你的代码,只传必要参数,按需传参

import multiprocessing
def demo(test_list):
    #在子进程中打印test_list
    #这个是创建子线程的时候,从父进程中复制过来的
    print(test_list)
if __name__ == '__main__':
    #设置创建子进程模式为spawn模式
    #如果此时要用到主线程的对象,需要通过参数传入,不可以直接使用
    multiprocessing.set_start_method("spawn")
    #主进程的test_list
    test_list = []
    p1 = multiprocessing.Process(target=demo,args=(test_list,))
    p1.start()
    #打印主线程中的test_list
    print(test_list)

三、forkserver模式【unix】

1、不支持文件对象和线程锁等传参 2、运行之前会先创建一个什么都没有的进程,再创建进程的时候会根据模板创建一个子线程,按需传参

来源:testingpai

继续阅读