2012-02-16 41 views
6

我開始冒險進入分佈式代碼,並且很難根據所有的東西找出適合我需求的解決方案。基本上我有一個Python數據列表,我需要使用一個函數來處理。這個函數有幾個嵌套for循環,但是對於列表中的每個項目不需要太長時間(大約一分鐘)。我的問題是列表非常大(3000+項)。我正在考慮多處理,但我想我想嘗試使用多服務器處理它(因爲理想情況下,如果數據變大,我希望能夠在作業期間選擇添加更多服務器以使其運行更快) 。關於在工作節點上分配python數據/代碼的建議?

我基本上找的東西,我可以通過發佈這個數據列表(而不是超級必要的,但它會很好,如果我可以通過這個也發佈我的代碼庫)

所以我的問題是,什麼包裝罐我用來實現這個?我的數據庫是hbase的,所以我已經運行了hadoop(儘管沒有使用過hadoop,只是將它用於數據庫)。我看着芹菜,並扭曲,但我很困惑,哪些將符合我的需要。

有什麼建議嗎?

回答

4

我會強烈建議celery。你可以定義你的列表中的單個項目工作的任務:

from celery.task import task 
@task 
def process(i): 
    # do something with i 
    i += 1 
    # return a result 
    return i 

您可以輕鬆地並行像這樣的列表:

results = [] 
todo = [1,2,3,4,5] 
for arg in todo: 
    res = process.apply_async(args=(arg)) 
    results.append(res) 

all_results = [res.get() for res in results] 

這是剛剛加入芹菜工人易於擴展。