python多处理pool.map挂起

时间:2016-05-30 14:56:40

标签: python dictionary multiprocessing hang pool

我甚至不能使用在python 2.7中运行的多处理包(使用spyder作为Windows上的UI)进行并行处理的最简单的例子,我需要帮助找出问题。我已经运行conda更新所以所有的包应该是最新的和兼容的。

即使多处理包文档中的第一个示例(如下所示)也无法工作,它会生成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() 

我很抱歉,如果确实有这个问题的答案,因为好像我应该能够管理这样一个适度的任务,但我不是一个程序员,而且我找到的资源不是很有帮助,因为我的水平非常有限知识。请告诉我需要哪些进一步的信息。

谢谢。

1 个答案:

答案 0 :(得分:4)

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

我建议只需在spyder中创建一个新文件,添加代码行,保存它,然后再运行它。

有关相关报告,请参阅: