지오 프로세싱 속도 테스트에 대한 비정상적인 결과


9

파이썬 지오 프로세싱 스크립트에서 비정상적인 성능을 관찰했습니다. (첨부) 스크립트는 다음 작업을 수행합니다.

  1. 검색 커서를 사용하여 다각형 피쳐에 해당하는 UTM 영역을 조회
  2. 검색 커서 결과를 기반으로 공간 참조 객체 생성
  3. .csv를 피처 레이어로 변환 한 다음 포인트 피처 클래스로 변환

스크립트 실행 방법에 따라 처리 시간이 현저히 다릅니다.

  • IDLE = 203 초를 사용한 32 비트 처리
  • 32 비트 처리 포 그라운드 스크립트 도구 = 91 초
  • 64 비트 처리 백그라운드 스크립트 도구 = 206 초

위의 조건에서이 스크립트가 다르게 작동하는 이유는 무엇입니까? 포 그라운드에서 실행되는 32 비트 스크립트 도구가 다른 방법보다 2 배 빠르지는 않을 것입니다.


import arcpy, os, time

###IDLE Parameters
##fc = r'C:\path\to\polygon\fc\with\utm\zones\and\features'
##outws = r'C:\out\location'
##arcpy.env.workspace = r'C:\workspace'

####################
## Script tool parameters
fc = arcpy.GetParameterAsText(0)    # Feature class
outws = arcpy.GetParameterAsText(1) # Folder
arcpy.env.workspace = arcpy.GetParameterAsText(2)   # Workspace
####################

# Tables are .csv
tables = arcpy.ListTables()

start = time.clock()

# Look up which UTM zone .csv features are in
for t in tables:
    quad = t[7:17]
    print quad
    whereClause = """ "QUADID" LIKE '%s' """ % quad
    with arcpy.da.SearchCursor(fc, ("QUADID","ZONE"), whereClause) as cursor:
        for row in cursor:
            if row[0] == quad:
                utmZone = row[1]
                if utmZone == 10:
                    sr = arcpy.SpatialReference(26910)  # NAD_1983_UTM_Zone_10N
                elif utmZone == 11:
                    sr = arcpy.SpatialReference(26911)  # NAD_1983_UTM_Zone_11N
                elif utmZone == 12:
                    sr = arcpy.SpatialReference(26912)  # NAD_1983_UTM_Zone_12N
                elif utmZone == 13:
                    sr = arcpy.SpatialReference(26913)   # NAD_1983_UTM_Zone_13N
                else:
                    print "The UTM Zone is outside 10-13"
            else:
                pass

    # Convert .csv to feature class
    try:
        outLayer = "in_memory"
        # Now with the sr defined, create the XY Event Layer
        arcpy.MakeXYEventLayer_management(t, "x", "y", outLayer, sr, "z")
        arcpy.FeatureClassToFeatureClass_conversion(outLayer, outws, t[7:17])
        arcpy.Delete_management("in_memory")
        end = time.clock()
        print "In_memory method finished in %s seconds" % (end - start)

    except:
        # Print any error messages
        print arcpy.GetMessages(2)

print "Processing complete"

1
아크 피를 가져 오는 데 얼마나 걸립니까? 게시물에 서식 오류가 있습니까? 시도 : for 루프 안에 있어야합니까?
Nathan W

2
@NathanW의 요점은 import arcpy먼저 고려해야 할 가치가 있다고 생각합니다. 왜냐하면 세 가지 테스트의 IDLE 및 64 비트 경로에만 시간이 필요한 것처럼 보이지만 거의 2 분을 추가하면 과도한 것으로 보입니다. ArcPy를 가져 오는 데 시간이 지나지 않는 도구를 실행 해보십시오.
PolyGeo

3
나는 그것이 import arcpy라인 이라고 말하는 것이 안전합니다 . 마지막으로 arcpy를 사용했을 때 외부에서 가져 오는 것이 느 렸습니다. ArcGIS는 이미 내부 Python으로 가져 왔으므로 가져 오기가 이미 캐시되었습니다.
Nathan W

3
@Nathan과 다른 사람들은 절대적으로 정확합니다. IDLE 또는 명령 행을 통해 프로세스를 실행하면 'import arcpy'를 호출 할 때 적중합니다. 그러나 성능 향상을 통해 시간을 되돌릴 수있는 매우 큰 프로세스에 대한 균형을 맞출 수 있습니다. 백그라운드 프로세스를 실행하면 ArcGIS가 다른 ArcMap 세션을 효과적으로 시작하므로 시간이 많이 걸립니다. 마지막으로, 32 비트와 64 비트 컴퓨터의 하드웨어 차이점과 시험 중에 리소스를 소비하는 다른 프로세스 등 시험에서 제거해야 할 다른 변수도 있습니다.
MappaGnosis

2
@JayLaura +1 더 나아가서 프로필을 작성할 수 있습니다. [ General python doc] [ docs.python.org/2/library/profile.html] 및 [ stackexchange posting] [ stackoverflow.com/questions/582336/… .
Roland

답변:



6

나는 이론이있다.

문제가 출력 또는 입력의 유효성 검사일 수 있다고 생각합니다. GP 도구가 실행되기 전에 arcpy는 매개 변수의 유효성을 검사합니다 (예 : 출력 기능 클래스가 이미 존재하는지 여부).

ArcMap 내에서 작업 공간 (폴더) 내용이 모두 캐시되고 메모리의 빠른 작업 공간에 대한 카탈로그의 "보기"에 대해 유효성 검사를 수행 할 수 있습니다. ArcGIS가 아닌 도구를 사용하여 데이터 세트를 추가하면 카탈로그보기를 작업 공간 (폴더)의 상태와 동기화하기 위해 arcpy.RefreshCatalog ()를 실행해야하는 경우 혼란이 발생할 수 있습니다.

폴더가 매우 커서 ArcGIS 외부에서 실행중인 경우 arcpy는 FeatureClassToFeatureClass 출력의 유효성을 검사하기 위해 매번 폴더 목록을 생성해야 할 수 있습니다. 폴더에 많은 항목이 있으면 속도가 느려질 수 있습니다.

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