我想执行并行计算并将结果返回给主线程。由于这是做了很多次,我假设处理消息传递的开销会阻碍性能(这个假设是否正确?),所以我想使用线程。如何运行在多个内核上使用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的阵列。
查询:
为池的默认值是CPU_COUNT()。我认为这是最佳的?
为什么这不起作用? (这个过程似乎没有返回...)
您是否考虑过使用'multiprocessing'模块而不是线程?它非常易于使用(特别是'multiprocessing.Pool'),并且允许您在CPython中使用多个核心执行CPU绑定的任务,因为每个进程都会有一个单独的Global Interpreter Lock。 – Blckknght 2013-04-30 03:58:40
jython没有numpy。 – tiago 2013-04-30 07:39:29
感谢您的意见,请参阅我的更新 – Uri 2013-04-30 09:14:04