2017-04-20 44 views
1

我的Python代碼的功能非常簡單。它通過文件列表讀取netCDF文件,並在此情況下返回平均值。如何通過多處理(並行處理)加速我的Python代碼?

但是,讀取netCDF文件需要一些時間。我想知道是否可以通過多處理(並行處理)加速這個過程,因爲我的工作站有32核心處理器。

代碼如下:

from netCDF4 import Dataset 

for i in filerange: 
    print "Reading the",i, "file", "Wait" 
    infile_Radar = Dataset(file_list[i],'r') 

    # Read the hourly Data 
    Radar_rain=np.array(infile_Radar.variables['rain'][:]) 

    for h in range(0,24): 
     hourly_rain = Radar_rain[h,:] 
     hourly_mean[i,h] = np.mean(hourly_rain) 

np.savetxt('Hourly_Spatial_mean.txt', hourly_mean, delimiter='\t') 

因爲讀取文件independet給對方,這樣怎麼能做出最好的我的工作站?謝謝。

+0

線程而不是多處理,似乎更適合IO綁定任務。 –

+0

有很多方法可以分配進程,但是,您必須確保輸出不會相互覆蓋。 – mootmoot

+0

我沒有看到你讀取文件的位置。您可以通過將一個數據流上的讀取與另一個數據流進行重疊來獲得一些改進,但是這種擴展只能達到目前的程度。 – tdelaney

回答

0

看來你正在尋找一個相當標準的線程實現。假設它的數據集的構造這就是你可能想要做這樣的事情截斷部:

from threading import Thread 

def CreateDataset(offset, files, datasets): 
    datasets[offset] = Dataset(files[i], 'r') 


threads = [None] * len(filerange) 
data_sets = [None] * len(filerange) 

for i in filerange: 
    threads[i] = Thread(None, CreateDataset, None, (i, file_list, data_sets)) 
    threads[i].start(); 

for t in threads: 
    t.join() 

# Resume work with each item in the data_sets list 
print "All Done"; 

然後每個數據集做的工作你詳細的其餘部分。無論實際的「緩慢的東西」在哪裏,這都是基本的方法。