2012-02-26 127 views
1

我正在運行耗時的程序很多次。我有機會訪問集羣,我可以要求504個處理器,但客戶服務讓我們說慢,所以我轉向你。我用一個非常簡單的應用程序如下:現在Python多處理的限制。池

import multiprocessing 

def function(data): 
    data = complicated_function_I_was_given(data) 
    with open('unique_id', 'w') as f: 
     f.write(data) 

pool = multiprocessing.Pool(504) 
pool.map(function, data_iterator) 

,雖然我可以看到進程啓動(即「complicated_function_I_was_given」寫了一堆廢鐵,但具有獨特的名字,所以我肯定是沒有衝突) ,這個過程似乎非常緩慢。我期待 data_iterator立即處理,雖然有些將需要幾天,但在1天后沒有產生任何東西。難道是multiprocessing.Pool()有一個限制嗎?或者說它不會通過不同的節點分配進程(我知道每個節點都有12個內核)?我正在使用python2.6.5。

回答

3

或者它不通過不同的節點分配進程(我知道每個節點有12個核心)?我正在使用python2.6.5。

我認爲這是你的問題:除非你的集羣體系結構非常不尋常,並且所有處理器看起來都在同一個邏輯機器上,那麼多處理只能訪問本地核心。您可能需要使用不同的並行庫。

另請參閱answers to this question

+0

感謝您的鏈接,我認爲你是對的。我不知道我怎麼會錯過這個問題!現在玩mpi4py比。 – Zenon 2012-02-27 00:09:13

1

您可能會嘗試使用Python的許多parallel libraries之一擴展工作,但我還沒有聽說過只通過多處理就可以在這麼多的處理器上擴展工作。