最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Windows上的Python多进程

业界 admin 9浏览 0评论

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

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
发布评论

评论列表 (0)

  1. 暂无评论