독립형 대 ArcGIS 도구로서의 Python 스크립트 성능


11

ArcToolbox에서 Python 스크립트를 실행하는 것과 독립형 스크립트를 실행하는 것의 차이점을 연구 한 사람이 있습니까? 대역 1을 추출하여 RGB 이미지 세트를 단일 대역으로 변환하기 위해 빠르고 더러운 스크립트를 작성해야했습니다. 독립형 스크립트는 내 PC로 읽고 쓰는 약 350 초 안에 동일한 크기의 1000 개의 이미지를 처리합니다. ArcToolbox에서 동일한 스크립트를 실행하는 데 약 1250 초가 걸립니다.

import arcpy
import csv
from os import path

arcpy.env.workspace = in_folder
image_list = arcpy.ListRasters()

#Create a CSV file for timing output
    with open(outfile, 'wb') as c:
        cw = csv.writer(c)
        cw.writerow(['tile_name', 'finish_time'])

        #Start the timer at 0
        start_time = time.clock()

        for image in image_list:
            #Extract band 1 to create a new single-band raster
            arcpy.CopyRaster_management(path.join(image, 'Band_1'), path.join(out_folder, image))
            cw.writerow([image, time.clock()])

각 타일의 처리가 완료된 시점을 추적하고 결과를 CSV로 내보내는 코드를 추가했습니다. Excel에서 완료 시간을 처리 시간으로 변환합니다. 결과를 그래프로 표시하면 처리 시간은 각 타일마다 스크립트와 거의 동일하지만 ArcGIS Tool로 실행하면 처리 시간이 선형으로 증가합니다.

여기에 이미지 설명을 입력하십시오

데이터 읽기 및 쓰기가 네트워크 장치에 대한 경우에는 증가가 기하 급수적으로 나타납니다.

이 특정 작업을 수행하는 다른 방법을 찾고 있지 않습니다. ArcGIS 도구로 실행할 때이 스크립트의 성능이 시간이 지남에 따라 저하되는 이유를 이해하고 싶지만 독립형 스크립트는 아닙니다. 다른 스크립트 에서도이 동작을 발견했습니다.


1
ArcGIS 외부의 파이썬이 훨씬 빠릅니다. 매우 간단한 스크립트를 수행 할 때만 python 창을 사용하거나 항목을 터미널에 끌어서 놓을 수있는 기능을 원합니다. ArcGIS 터미널은 전체 소프트웨어 패키지에도 Python이 필요하기 때문에 인터프리터의 리소스 할당을 제어합니다.
atxgis

내 추천 (내 경험에 근거하여 제공 한 것과 같은 정량화 된 성능 데이터는 아님)은 최후의 수단으로 arcpy 만 사용하는 것입니다. 위의 예에서, arcpy가없는 파이썬 인터프리터는 래스터를위한 디렉토리를 효율적으로 필터링하고 새로운 폴더에 복사 할 수 있습니다
Paul H

1
x64 백그라운드 지오 프로세싱과 처리 중 32 비트의 차이점은 무엇입니까?
Kirk Kuykendall

"ArcToolbox에서 Python 스크립트를 실행 중"이라고 말하면 Python Script 도구를 실행하고 있다는 의미입니까? 그렇다면 테스트에 대한 매개 변수없이 실행하고 있습니까?
PolyGeo

@PolyGeo 예, ArcGIS 툴박스에 스크립트 툴을 만들었습니다. in_folder 및 out_folder가 파생되는 1 개의 매개 변수가 사용되었습니다. 이는 타이밍 측정이 시작되기 전에 수행됩니다.
Bjorn

답변:


1

이것은 내가 취해야 할 일입니다. ArcToolbox에서 스크립트를 실행하면 도구가 주 응용 프로그램 (ArcMap)을 상호 작용 / 업데이트하려고 할 때 모든 종류의 숨겨진 비용이 발생합니다 . 모든 도구는 메타 데이터를 업데이트하고 일부는지도 창을 새로 고치려고 시도하고 MXD는 지오 프로세싱 기록 패널에서 실행하는 모든 도구를 기록합니다. IDE에서 실행될 때 이러한 숨겨진 영향은 발생하지 않습니다.

따라서 루프를 1000 번만 실행하면 MXD가 1000 개의 로그를 저장한다는 의미입니다. ArcMap은 독점 소프트웨어로 폐쇄되어 있기 때문에 처리 로그 기록 메커니즘이 실제로 어떻게 진행되고 있는지 파악할 수 없으며 속도 제한 단계가 큰 반복을 처리 할 수없는 데이터 구조입니까?

또 다른 문제는 ArcMap은 이벤트 중심 응용 프로그램이며, 이벤트가 발생하면 상황이 발생하고,지도를 이동하고지도를 새로 고치며, 데이터를 추가하고 버튼을 활성화 할 수 있습니다. 도구가 모든 종류의 이벤트를 발생시킬 수 있으며 도구가 반복적으로 사용될 때 응용 프로그램이 도구에 의해 "압도적"이 될 가능성이 있지만 추측하고 있습니까?

스크립트를 스크립트 도구로 노출하면 ArcMap 환경에서 특히 파워가 아닌 사용자에게 쉽게 사용할 수 있습니다. 코드를 채택하려면 중요한 문제입니다. 중간 품질 관리를 수행 할 필요없이 하드 코어 번호를 직접 처리 한 다음 선호하는 IDE에서 스크립트를 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.