[gdal-dev] Parllelization slows down single gdal_calc process in python
Lorenzo Bottaccioli
lorenzo.bottaccioli at gmail.com
Wed Mar 2 15:44:20 PST 2016
Hi,
I'm trying to parallelize a code for raster calculation with Gdal_calc.py,
but i have relay bad results. I need to perform several raster operation
like FILE_out=FILA_a*k1+FILE_b*k2.
This is the code I'm usign:
import pandas as pdimport osimport timefrom multiprocessing import Pool
df = pd.read_csv('input.csv', sep=";", index_col='Date Time', decimal=',')
df.index = pd.to_datetime(df.index, unit='s')
start_time = time.time()
pool=Pool(processes=8)
pool.map(mapcalc,[df.iloc[i*20:(i+1)*20] for i in range(len(df.index)/20+1)])
pool.close()
pool.join()print("--- %s seconds ---" % (time.time() - start_time))
def mapcalc(df):
month={1:'17',2:'47',3:'75',4:'105',5:'135',6:'162',7:'198',8:'228',9:'258',10:'288',11:'318',12:'344'}
hour={4:'04',5:'05',6:'06',7:'07',8:'08',9:'09',10:'10',11:'11',12:'12',13:'13',14:'14',15:'15',16:'16',17:'17',18:'18',19:'19',20:'20',21:'21',22:'22'}
minute={0:'00',15:'15',30:'30',45:'45'}
directory='/home/user/Raster/'
tmp='/home/usr/tmp/'
for i in df.index:
if 4<=i.hour<22:
#try:
timeg=time.time()
os.system('gdal_calc.py -A
'+directory+'filea_'+month[i.month]+'_'+hour[i.hour]+minute[i.minute]+'
-B '+directory+'fileb_'+month[i.month]+'_'+hour[i.hour]+minute[i.minute]+'
--outfile='+tmp+str(i.date())+'_'+str(i.time())+'
--calc=A*'+str(df.ix[i,'k1'])+'+B*'+str(df.ix[i,'k2']))
print(i,"--- %s seconds ---" % (time.time() - timeg))
If i run the code with out parallelization it takes around 650s to complete
the calculation. Each process of the for loop is executed in ~10s. If i run
with parallelization it takes ~900s to complete the procces and each
process of the for loop it takes ~30s.
How is that? how can i Fix this?
Best L
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20160303/c1e31037/attachment-0001.html>
More information about the gdal-dev
mailing list