2013-04-30 27 views
2

我想执行并行计算并将结果返回给主线程。由于这是做了很多次,我假设处理消息传递的开销会阻碍性能(这个假设是否正确?),所以我想使用线程。如何运行在多个内核上使用numpy的python程序,最好是使用线程

据我所知 - 只有在使用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. 为池的默认值是CPU_COUNT()。我认为这是最佳的?

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

+0

您是否考虑过使用'multiprocessing'模块而不是线程?它非常易于使用(特别是'multiprocessing.Pool'),并且允许您在CPython中使用多个核心执行CPU绑定的任务,因为每个进程都会有一个单独的Global Interpreter Lock。 – Blckknght 2013-04-30 03:58:40

+0

jython没有numpy。 – tiago 2013-04-30 07:39:29

+0

感谢您的意见,请参阅我的更新 – Uri 2013-04-30 09:14:04

回答

1

我错过了一个主要的函数来包装一切。显然这对多处理很重要。

def main(): 
    run_my_stuff() 

if __name__ == "__main__": 
    main() 

而且 - 同样的效果可以,如果你的进程正在使用的队列已满(它有一定的容量)引起的,所以它可以帮助改变代码,以便它可以在拉从队列项目同时他们被添加。

相关问题