multiprocessing pool.map在我的旧PC上可以很好地工作,但在新PC上却不能工作。 挂在对
的呼叫中def wait(self,timeout=None)
self._event.wait(timeout)
这时,CPU利用率下降到零%,没有任何反应,就像进入睡眠状态一样。
我写了一个简单的test.py,如下所示
import multiprocessing as mp
letters = ['A','B','C']
def doit(letter):
for i in range(1000):
print(str(letter) + ' ' + str(i))
if __name__ == '__main__':
pool = mp.Pool()
pool.map(doit,letters)
这可以在具有i7-7700k(4cores,8logical),python365-64bit,Win10Pro,PyCharm2018.1的旧PC上使用,其中stdout按预期以非连续顺序显示字母和数字。 虽然相同的代码在新版本的i9-7960(16core-32ologic),python37-64bit,Win10Pro,PyCharm2018.3上不起作用
从2017/11(较旧的4个月)起,尚未更新新的PC BIOS版本
pool.py在两台计算机上都相同(2006-2008 R Oudkerk)
它在“等待”功能中挂起的代码行是...
self._event.wait(timeout)
请帮助我寻找下一步可以找到原因的地方。
谢谢。
... 编辑:: 我的进一步解释- 1. GIL(全局解释器锁)在这里不相关,因为它仅与多线程有关,与多处理无关。 2. multiprocessing.manager在这里是不必要的,因为代码消耗了静态输入并产生了独立的输出。因此,也不要求pool.close和pool.join,因为我不是后期处理连接结果 3.尽管我在这里看不到解决方案,但是此链接是多处理的很好的介绍。 https://docs.python.org/2/library/multiprocessing.html#windows