Windows上的Python多进程

在Windows上使用Python的multiprocessing模块时,由于Windows进程启动方式为Spawn,不同于Linux的Fork,需要额外注意避免启动异常。在Jupyter Notebook中,`if name == "main"`也不能确保多进程正常运行,因为在Interactive模式下,子进程无法找到执行函数。此外,Python多进程与GPU编程结合时,由于GPU数据不可序列化,需确保传递的是CPU变量并在子进程中加载到GPU。

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

Python Multiprocessing on Windows

因为众所周知的GIL(全局解释器锁),在Python上实现真正的并发只能通过python multiprocessing。但是在Windows上,运用python multiprocessing并没有在Linux那么简单。

if __name__ == "__main__":

也许大家有些在Linux跑的很好的多进程的程序,在Windows上一跑就会经常遇到这些错误的信息

“An attempt has been made to start a new process before the current process has finished its bootstrapping phase”

根本原因在与Windows的进程启动的方式和Linux是不一样的。
Windows的进程启动方式是Spawn,Linux的缺省的启动方式是Fork。简单的说,Fork会复制父进程的所用东西,而Spawn不会。对于Python而言,Spawn会在进程中生成一个新的Python解释器,并重新加载各个module.

start method fork spawn
进程启动时 Import module NO YES
变量的ID与父进程保持一致 YES NO
子进程能得到在 if name == “main” block
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值