python多处理pool.map挂起

Posted

技术标签:

【中文标题】python多处理pool.map挂起【英文标题】:python multiprocessing pool.map hangs 【发布时间】:2016-05-30 14:56:40 【问题描述】:

我什至无法使用在 python 2.7 中运行的多处理包(在 Windows 上使用 spyder 作为 UI)制作最简单的并行处理示例,我需要帮助来解决问题。我已经运行 conda update 所以所有的包都应该是最新的并且兼容。

即使 multiprocessing 包文档中的第一个示例(如下所示)也无法正常工作,它会生成 4 个新进程,但控制台只是挂起。在过去的 3 天里,我已经尝试了所有能找到的东西,但没有任何代码在没有挂起的情况下运行,不会将超过 25% 的计算能力分配给这个任务(我有一台 4 核计算机)。

我已经放弃运行我设计的程序,此时需要并行处理,我只是想获得概念证明,以便我可以从那里构建。有人可以解释并指出我正确的方向吗?谢谢

来自https://docs.python.org/2/library/multiprocessing.html的示例1

#

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool()
    print(p.map(f, [1, 2, 3]))

来自http://chriskiehl.com/article/parallelism-in-one-line/的示例2(从原始修改)

from multiprocessing import Pool

def fn(i):
    return [i,i*i,i*i*i]

test = range(10)

if __name__ == '__main__':    
    pool = Pool() 
    results = map(fn,test)
    pool.close() 
    pool.join() 

如果确实有答案,我深表歉意,因为似乎我应该能够管理如此温和的任务,但我不是程序员,鉴于我的水平非常有限,我发现的资源没有多大帮助的知识。请让我知道需要什么进一步的信息。

谢谢。

【问题讨论】:

代码看起来非常好。你能用 IDLE 试试吗?只是为了确保它不是一个 spyder 错误。 好的,我的第二个示例中的代码似乎使用 IDLE 运行得很好。如果这表明存在 spyder 错误,您将如何建议继续使用 UI 来与 python 交互? 【参考方案1】:

在我的虚拟机上安装 spyder 后,它似乎是一个特定于 spyder 的错误。示例 1 在 IDLE 下工作,通过命令行执行,从 spyder 内部执行(先保存然后执行),但在 spyder 中逐行执行时不行。

我建议简单地在 spyder 中创建一个新文件,添加代码行,保存它,然后运行它..


相关报道见:

https://groups.google.com/forum/#!topic/spyderlib/LP5d8QZTXd0 QtConse in Spyder cannot use multiprocessing.Manager Multiprocessing working in Python but not in iPython https://github.com/spyder-ide/spyder/issues/1900

【讨论】:

非常感谢您的指导和参考,我很感激。我没有考虑过 spyder 是问题的潜在根源。

以上是关于python多处理pool.map挂起的主要内容,如果未能解决你的问题,请参考以下文章

Pybind11 多处理挂起

调试随机挂起并使用 100% 处理器内核的 Python 脚本

当多处理进程打开另一个进程时程序在调试中挂起

在 Python 多处理中将 Pool.map 与共享内存数组结合起来

当脚本在多处理工作人员中运行异步事件循环时,通过子进程运行脚本会挂起

Python - 多进程map的使用方法