本博文源于自己学习python,用代码探讨这三者区别。
fork
用于unix系统,fork会拷贝主进程的值。如下面,输出内容
import multiprocessing
import time
def task():
print(name)
name.append(123)
if __name__ == '__main__':
multiprocessing.set_start_method("fork")
name = []
p1 = multiprocessing.Process(target=task)
p1.start()
time.sleep(2)
print(name)
这篇代码的输出结果为两个空列表
[]
[]
为什么呢?因为fork会拷贝主进程的内容,两个内存地址不同,所以task函数里输出与主进程不影响。
spawn
unix与windows都可用,简单创建进程,数据需要由参数传递,不共享主进程,下面这段程序输出?
import time
def task(data):
print(data)
data.append(999)
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
name = []
p1 = multiprocessing.Process(target=task,args=(name,))
p1.start()
time.sleep(2)
print(name)
因为从参数传递共享数据,所以都输出
[]
[]
forkserver
仅部分unix可用,而且与spawn类似都需要传参数。