使用Python多处理并行拆分许多ArcGIS栅格



我希望将10个图像分割为两个部分,每个部分(20个结果图像)。这些图像是本网站提供的4波段(R、G、B、nIR)NAIP图像。我使用ArcGIS的arcpy包一次分割一个图像:

import arcpy, os
inws = r'D:temptemp_NAIP'  #Contains ~10 .tif images
outws = r'D:temptemp_NAIP_tiles'
arcpy.env.workspace = inws
rasters = arcpy.ListRasters()
for ras in rasters:
arcpy.SplitRaster_management(
ras, outws, 
os.path.basename(ras).split('.')[0], 
split_method='NUMBER_OF_TILES', 
format='TIFF', 
num_rasters='1 2',
overlap=50, units='PIXELS)

如何将multiprocessing模块集成到上述脚本中,以便一次处理4个图像?

顺便说一句,我知道有一篇结合了multiprocessingarcpy的博客文章,尽管这些例子是针对矢量数据的,我不知道如何利用这些工具来处理图像。

除非出现任何资源共享问题,否则使用multiprocessing.Pool很容易将简单的for循环转换为多处理。试试这样的东西:

from multiprocessing import Pool
import arcpy, os
inws = r'D:temptemp_NAIP'  #Contains ~10 .tif images
outws = r'D:temptemp_NAIP_tiles'
arcpy.env.workspace = inws    
rasters = arcpy.ListRasters()
def process_img(ras):
arcpy.SplitRaster_management(
ras, outws, 
os.path.basename(ras).split('.')[0], 
split_method='NUMBER_OF_TILES',
format='TIFF', 
num_rasters='1 2',
overlap=50, units='PIXELS')
pool = Pool(processes=4)
pool.map(process_img, rasters)

只要rasters是可迭代的,它就应该可以映射到进程池。请记住,每个进程都将"继承"父进程的堆栈,这样每个进程都会使用自己的arcpy.env.workspace副本。

最新更新