Python 多处理池永远不会完成

SMe*_*ric 6 python

我正在运行以下(示例)代码:

from multiprocessing import Pool

def f(x):
  return x*x

pool = Pool(processes=4)
print pool.map(f, range(10))
Run Code Online (Sandbox Code Playgroud)

但是,代码永远不会完成。我究竟做错了什么?

线

pool = Pool(processes=4)
Run Code Online (Sandbox Code Playgroud)

成功完成,它似乎停在最后一行。即使按 ctrl+c 也不会中断执行。我在 Spyder 的 ipython 控制台中运行代码。

Jam*_*mes 6

from multiprocessing import Pool


def f(x):
    return x * x


def main():
    pool = Pool(processes=3)  # set the processes max number 3
    result = pool.map(f, range(10))
    pool.close()
    pool.join()
    print(result)
    print('end')


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

关键步骤是在进程完成后调用pool.close()和。pool.join()否则池不会被释放。此外,您应该通过将代码放入主进程中来创建池if __name__ == "__main__":

  • 这并不能解决我的问题(在 Windows 机器上)。我可以看出所有任务都已完成,因为 CPU 使用率降至零,但“pool.map”从未得到解决。 (2认同)