스크립트의 함수에서 다중 처리를 사용하려고하는데 다중 처리를위한 구조 및 구문에 문제가 있다고 생각합니다. 여기서 목표는 목록을 반복하고 13 개의 서로 다른 공간 지오 데이터베이스의 래스터/tiff 이미지를 복사하는 것입니다. 출력과 입력 모두 개별 지오 데이터베이스에 저장되어 프로세스 속도를 높이고 충돌을 방지합니다. 다음은 예제 스크립트입니다.python 스크립트의 다중 처리 기능
import arcpy, time, os
from arcpy import env
import multiprocessing
from multiprocessing import pool
def copy_rasters_3b(P6_GDBs, x, c):
mosaic_gdb = os.path.join('{}/mosaic_{}.gdb/{}'.format(P6_GDBs, x, c))
final_gdb = os.path.join('{}/final_{}.gdb/{}'.format(P6_GDBs, x, c))
final_tiff = os.path.join('{}/{}.tif'.format(P6_GDBs, c))
print "---Copying Rasters Started---"
start_time = time.time()
arcpy.CopyRaster_management(mosaic_gdb, final_gdb, "", "", "", "NONE", "NONE", "8_BIT_UNSIGNED", "NONE", "NONE", "", "NONE")
arcpy.CopyRaster_management(mosaic_gdb, final_tiff, "", "", "", "NONE", "NONE", "8_BIT_UNSIGNED", "NONE", "NONE", "TIFF", "NONE")
print("--- "+ c + " Complete %s seconds ---" % (time.time() - start_time))
### Main ###
def main():
P6_DIR= "D:/P6_SecondRun"
P6_GDBs= "D:/P6_GDBs"
Categories =['CRP', 'FORE', 'INR', 'IR', 'MO', 'PAS', 'TCI', 'TCT', 'TG', 'WAT', 'WLF', 'WLO', 'WLT']
rasters = defaultdict(list)
# Environments
arcpy.env.overwriteOutput = True
arcpy.env.snapRaster = "D:/A__Snap/Phase6_Snap.tif"
arcpy.env.outputCoordinateSystem = arcpy.SpatialReference(102039) #arcpy.SpatialReference(3857)
pool = multiprocessing.Pool(processes=5)
for c, x in zip(Categories, range(1,14)):
pool.map(copy_rasters_3b(P6_GDBs, x, c), 14)
pool.close()
############### EXECUTE MAIN() ###############
if __name__ == "__main__":
main()
이 스크립트는 백그라운드에서 5 개의 프로세스를 시작하지만 처음 두 인스턴스 후에는 결국 실패합니다. 저는 ArcMap 10.4 x64를 실행 중이며 Python27-64 비트로 작업하고 있습니다.