커뮤니티의 다른 누군가가 공간 분석을 위해 다중 처리를 사용하려고했는지 궁금합니다. 즉, 일련의 래스터를 반복하고 각각에 대해 다중 처리 작업을 만들고 하나의 def 함수 내에서 여러 지리 처리 단계를 통해 실행하려고합니다. 라인을 따라 뭔가
def net(RasterImage, OutFolderDir):
arcpy.env.overwriteOutput = True
arcpy.env.workspace = OutFolderDir
DEM_Prj = DEM_Prj.tif
try:
arcpy.ProjectRaster_management(RasterImage, DEM_Prj....
FocalStatistics(DEM_prj....)
...
if __name__ == '__main__':
InputFolder = r'C:\test\somepath'
Output = r'C:\test\somepath2'
arcpy.env.workspace = InputFolder
arcpy.env.scratchWorkspace = r'C:\test.gdb'
fcs = arcpy.ListRasters('*')
pool = multiprocessing.Pool(4)
jobs = []
for fc in fcs:
rIn = os.path.join(InputFolder,fc)
rOut = os.path.join(Output,fc[:-4])
jobs.append(pool.apply_async(net,(rIn, rOut)))
이제 멀티 프로세싱이 일반적으로 첫 번째 배치에서 실행됩니다! 그러나 다음을 포함하여 여러 데이터 세트 (4 개 이상의 파일-4 코어 멀티 프로세싱)를 시도 할 때 여러 가지 다른 오류가 계속 발생합니다.
ERROR 010302: Unable to create the output raster: C:\somepath\sr6f8~1\FocalSt_srtm1
ERROR 010067: Error in executing grid expression.
Failed to execute (FocalStatistics).
과
ERROR 999999: Error executing function.
Failed to copy raster dataset
Failed to execute (ProjectRaster)
첫 번째 오류에서 최종 출력의 정확한 복제본을 거의 생성하는 초점 통계와 연관된 이상한 폴더 (OutFolderDir 위치에)가 생성됩니다.
내 질문은 귀하의 경험을 기반으로합니다. 하나의 다중 처리 기능 내에서 여러 단계의 지리 처리를 만드는 것이 불가능합니까? 아니면이 단계들을 개별 지오 프로세싱 단계로 타일링해야합니까?
최신 정보
비슷한 오류가 계속 발생합니다-가져 오기 기능을 def 기능으로 옮기면
import arcpy
from arcpy.sa import *
import *가 허용되지 않는다는 구문 경고가 추가 된 출력을 작성할 수 없습니다.
업데이트 # 2
나는 이것이 답이 늦다는 것을 알고 있지만, 다중 처리가 아크 피와 함께 작동 할 수 있도록 내 대안을 참조 할 때 다른 사람에게 도움이 될 것이라고 생각했습니다. 이 문제로 돌아온 후 발견 한 주요 문제는 arcpy 모듈의 경쟁이 아니라 ArcObjects가 임시 파일을 저장하는 데 사용하는 scratchWorkspace와의 경쟁입니다. 따라서 멀티 프로세싱 구문 분석 인수에 카운터를 실행하여 각 프로세스에 대해 고유 한 scratchWorkspace를 작성하는 것이 좋습니다.
Counter = 0
for fc in fcs:
rIn = os.path.join(InputFolder,fc)
rOut = os.path.join(Output,fc[:-4])
jobs.append(pool.apply_async(net,(rIn, rOut,Counter)))
Counter += 1
그런 다음 기본 기능에서 특정 임시 디렉토리를 작성하고 각 다중 처리 태스크에 고유 한 scratchWorkspace를 지정하십시오.
def main(RasterImage,OutFolderDir,Counter)
TempFolder = os.path.join(os.path.dirname(OutFolderDir),'Temp_%s'% (Counter))
os.mkdir(TempFolder)
arcpy.scratchWorkspace = TempFolder
...
초기에 별도의 임시 작업 공간을 사용하라는 제안이 Ragi에 도움이 되었기를 바랍니다. 여전히 원래 작동하지 않는 이유 때문에 여전히 당황했습니다.
추가 자료
R
. 예를 들어 focalstats는에서 수행 할 수 있습니다 . 이것들은 가치가있는 것보다 문제가 많기 때문에 범용 작업에 대한 좋은 제안은 아니지만 한 번에 시간을 절약 할 수있을 때 반복적으로 노력하면 보상을받을 수 있습니다.