Python多处理pool.map self._event.wait(timeout)挂起。为什么pool.map等待没有响应?

时间:2019-01-23 06:57:16

标签: python multiprocessing pool

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

0 个答案:

没有答案