浅谈python多进程-在不同平台下运行报错

浅谈python多进程-在不同平台下运行报错

​ 在python中要想让程序真正的做到并发执行不可避免的会使用到multiprocessing这个模块,在项目中可能会遇到如下情景:在Windows系统下编写了一个多进程的脚本,各种测试没有问题后将脚本copy到Linux平台或者Ubuntu平台下去运行,结果程序各种错误,无法成功运行。

​ 上面那个案例是我亲身经历,捣鼓半天没有解决,后来查找资料了解到Python的多进程在不同平台下的默认启动创建子进程的方式不同,导致的错误

​ 在Linux和Ubuntu平台下默认创建子进程的方式都是fork,而在Windows和Mac平台下却是spawn

​ 可以通过以下代码查看和修改子进程的创建方式

import multiprocessing

if __name__ == "__main__":
	# 打印创建子进程方式
    print(multiprocessing.get_start_method())
    # 修改创建方式
    multiprocessing.set_start_method("fork")

​ 那么这两种子进程的创建方式有什么区别呢

  • fork:除了必要的启动资源外,其他的变量、包、数据等都是继承父进程的,由于指针指向的同一个变量地址,可能会造成公共变量信息不及时更新等问题,导致程序出错
  • spawn:从头构建一个子进程,父进程的数据等拷贝到子进程的空间中,拥有自己的解释器,相当于每个子进程的变量都是单独的。各个进程读取变量相对安全,同时启动也较慢

Windows 系统只支持 spawn,而 Linux/Mac 既支持 spawn 又支持 fork,可根据需要选择

资料参考的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值