我最近学习了如何使用os.fork(),它是多处理背后的基本思想。据我所知,这是使用Python时使用多个核心的唯一方法,因为如果我执行线程,全局解释器锁(GIL)将通过强制一次只运行一个线程来阻止我使用这些CPU核心。我不明白的是,我如何确保os.fork()创建的新进程可以以某种方式保证运行在另一个CPU核心上,而不是父进程上?或者这种担心在某种程度上是不相关的?
os.fork()
ljo96ir51#
最近我一直在用Python进行深度学习,我发现Python完全不适合科学计算。回到你的问题,linux上的python默认使用fork来处理多个进程,但根据我的实验,在一台有32个逻辑cpu的机器上,fork模式将永远只使用2个逻辑核心。不管你有多少工人。当你切换到spawn时,一切都改变了,所有的核心都在运行。但是,spawn有很多限制。在并行计算方面,Python是一团糟更新:它是pytorch的bug。即使是这样一个著名的图书馆也不能完全信任。
1条答案
按热度按时间ljo96ir51#
最近我一直在用Python进行深度学习,我发现Python完全不适合科学计算。回到你的问题,linux上的python默认使用fork来处理多个进程,但根据我的实验,在一台有32个逻辑cpu的机器上,fork模式将永远只使用2个逻辑核心。不管你有多少工人。当你切换到spawn时,一切都改变了,所有的核心都在运行。但是,spawn有很多限制。在并行计算方面,Python是一团糟
更新:它是pytorch的bug。即使是这样一个著名的图书馆也不能完全信任。