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

本贴最后更新于 491 天前,其中的信息可能已经时移世改

一、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、运行之前会先创建一个什么都没有的进程,再创建进程的时候会根据模板创建一个子线程,按需传参

回帖
请输入回帖内容 ...