前段时间用GP工具做了一个,见http://blog.csdn.net/mmll0927/article/details/77600908
现在目的一样,用GP工具虽然极大的简化了操作,但由于单进程是一个一个顺序处理的,在校正这种单个所需时间较长的工作,一个一个的顺序处理有些浪费时间了,便想到能否利用python标准库中的multiprocessing多进程模块,充分把电脑硬件用起来,提高效率。
import arcpy
import multiprocessing
import os
import string
def GetList(files):
img_name = arcpy.Describe(files[0]).baseName
split_index = img_name.find(name_qian)
img_name_qian = img_name[:split_index]
img_name_hou = img_name_qian + name_houzhui+".img"
Output_img = os.path.join(save_folder,img_name_hou)
Resamping_img= os.path.join(Resamping_folder,img_name_hou)
arcpy.WarpFromFile_management(files[0], Output_img, files[1], warp_type, resamping)
arcpy.Resample_management(Output_img, Resamping_img, resolution, resamping)
def main():
img_GCP_list=[]
for i in range(len(imglist)):
img_GCP = [imglist[i],GCPlist[i]]
img_GCP_list.append(img_GCP)
#设置进程数量:
pool = multiprocessing.Pool(processes=4)
result = pool.map(GetList, img_GCP_list)
pool.close()
pool.join()
#全局变量(GP工具输入):
imglist = string.split(arcpy.GetParameterAsText(0),";")
GCPlist = string.split(arcpy.GetParameterAsText(1),";")
save_folder = arcpy.GetParameterAsText(2)
warp_type = arcpy.GetParameterAsText(3)
resamping = arcpy.GetParameterAsText(4)
resolution = arcpy.GetParameterAsText(5)
name_qian = arcpy.GetParameterAsText(6)
name_houzhui = arcpy.GetParameterAsText(7)
Resamping_folder = arcpy.GetParameterAsText(8)
#运用multiprocessing时必须要有下面:
if __name__ == "__main__":
main()
需要两个文件夹save_folder 和Resamping_folder ,用来输出校正后的影像和把校正后文件再重采样的影像。不过速度确实是快了很多,可以充分利用多核CPU,同时处理。