如何运行在多个核心上使用numpy的python程序,最好使用线程

时间:2013-04-30 02:14:58

标签: python multithreading numpy multiprocessing

我想做并行计算并将结果返回给主线程。由于这已经完成了很多次,我认为处理消息传递的进程开销会阻碍性能(这个假设是否正确?),所以我想使用线程。

据我了解 - 只有当我使用jython或ironpython(哪个更好?)时,线程才会在不同的核心上运行。

假设这是正确的 - 我所要做的就是将我的eclipse解释器切换到上面的一个?

最后,我正在使用numpy。这是一个问题吗? jython / ironpython的实现是否会妨碍numpy性能?

更新

我现在正在尝试按照以下建议使用多进程。我在以一种干净的方式传递参数时遇到了麻烦(也是出于某种原因,当我停止应用程序运行打开的进程时,请不要关闭,我必须重新启动计算机!)。这就是我想要做的事情:

pool = multiprocessing.Pool()
results = pool.map(my_class(param1=bla1, param2=bla2), list_args)

其中list_args是类my_class的__call__函数的参数列表,而bla1和bla2是numpy数组。

查询:

  1. pool的默认值是cpu_count()。我认为这是最佳的?

  2. 为什么这不起作用? (这些过程似乎没有返回......)

1 个答案:

答案 0 :(得分:1)

我错过了包装所有内容的主要功能。显然这对多处理非常重要。

def main():
    run_my_stuff()

if __name__ == "__main__":
    main()

此外 - 如果您的进程正在使用的队列已满(它具有一定的容量),则可能导致相同的效果,因此它可以帮助更改代码,以便允许在同时从队列中提取项目他们被添加。