2013-05-07 17 views
0

我想並行化一個python腳本。我已經創建一個定義:如何將多個參數並行化一個簡單的python def

def dummy(list1,list2): 
    do usefull calculations ... 

在List1和List2包含的文件名列表,要我看,然後進行計算他們。這些文件是獨立的。 list1和2包含相同數量的參數。

讓我們假設我有2個cpus(我想強制使用cpus的數量)。我希望第一個cpu使用只包含list1和list2的前半部分的列表調用定義,同時第二個cpu應該與list1和list2的後半部分調用相同的def dummy。

喜歡的東西:

import multiprocessing 
nb_cpus = 2 
pool = multiprocessing.Pool(processes=nb_cpus) 
for ii in nb_cpus: 
    list_half1 = list1[0:max/nb_cpus] 
    list_half2 = list2[0:max/nb_cpus] 
    result[ii] = pool.map(dummy,list_half1,list_half2) 

的問題是,pool.map只有在高清有1個參數和工作,我不能遍歷的CPU。

謝謝你對這個問題的任何幫助!

PS:我不可能將兩個參數連接成一個參數,因爲在實際情況中,我正在傳遞更多的參數。

回答

2

首先,你不需要自己拆分你的列表,multiprocessing.Pool會爲你做。

要通過許多參數的函數作爲一個參數,你只需要在列表壓縮在一起,就像這樣:

import multiprocessing 

def myFunction(arguments): 
    item1, item2 = arguments 
    ... 

nb_cpus = 2 
pool = multiprocessing.Pool(processes=nb_cpus) 
results = pool.map(myFunction, zip(list1, list2)) 
+0

或者使用'pool.starmap'調用'myFunction的(*項目)' 。 – Blckknght 2013-05-07 17:39:43

+0

謝謝你的回覆。 問題是我的一些參數不能在整個cpus上分割,而是傳遞給每個cpus。我怎樣才能做到這一點? – sponce 2013-05-07 21:18:42

+0

我通過定義一個全局變量來解決這個問題。感謝您的幫助。 – sponce 2013-05-10 15:49:19

相關問題