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 |


发布评论