我希望将10张图像分成2个部分(20个结果图像)。图像是来自this website的4波段(R,G,B,nIR)NAIP图像。我正在使用ArcGIS中的arcpy
包一次拆分一个图像:
import arcpy, os
inws = r'D:\temp\temp_NAIP' #Contains ~10 .tif images
outws = r'D:\temp\temp_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个图像?
顺便说一句,我知道multiprocessing
结合了arcpy
和{{1}},虽然示例是针对矢量数据的,但我无法弄清楚如何利用这些工具来处理图像。
答案 0 :(得分:1)
除了任何资源共享问题外,使用multiprocessing.Pool
很容易将简单的for循环转换为多处理。尝试这样的事情:
from multiprocessing import Pool
import arcpy, os
inws = r'D:\temp\temp_NAIP' #Contains ~10 .tif images
outws = r'D:\temp\temp_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
。