一、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.com!
注册 关于