我想執行並行計算並將結果返回給主線程。由於這是做了很多次,我假設處理消息傳遞的開銷會阻礙性能(這個假設是否正確?),所以我想使用線程。如何運行在多個內核上使用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