2017-04-20 89 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"; 

然后每个数据集做的工作你详细的其余部分。无论实际的“缓慢的东西”在哪里,这都是基本的方法。