Python如何理解fork、forkserver、spawn

本文通过代码示例探讨了Python在多进程处理中fork、spawn方法的区别。fork在Unix系统中会复制主进程的内存,导致两个进程不共享数据,因此输出是两个空列表。而spawn在创建进程时不会共享主进程内容,数据需通过参数传递,所以同样输出为空列表。forkserver是另一种Unix下的方式,类似于spawn,也需要通过参数传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博文源于自己学习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类似都需要传参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值