2013-04-30 71 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() 

而且 - 同樣的效果可以,如果你的進程正在使用的隊列已滿(它有一定的容量)引起的,所以它可以幫助改變代碼,以便它可以在拉從隊列項目同時他們被添加。

相關問題