ผลลัพธ์ที่ผิดปกติสำหรับการทดสอบความเร็วการประมวลผลทางภูมิศาสตร์


9

ฉันสังเกตการทำงานผิดปกติด้วยสคริปต์การประมวลผล Python สคริปต์ (แนบ) ดำเนินการต่อไปนี้:

  1. ใช้เคอร์เซอร์ค้นหาเพื่อค้นหาโซน UTM ที่สอดคล้องกับคุณสมบัติรูปหลายเหลี่ยม
  2. สร้างวัตถุอ้างอิงเชิงพื้นที่โดยยึดตามผลลัพธ์ของเคอร์เซอร์ค้นหา
  3. แปลง. csv เป็นเลเยอร์คุณลักษณะแล้วไปยังคลาสคุณลักษณะจุด

ฉันสังเกตเห็นเวลาการประมวลผลที่แตกต่างกันอย่างชัดเจนตามวิธีการเรียกใช้สคริปต์:

  • การประมวลผลแบบ 32 บิตโดยใช้IDLE = 203 วินาที
  • เครื่องมือประมวลผลเบื้องหน้า32 บิต = 91 วินาที
  • เครื่องมือสคริปต์พื้นหลังการประมวลผล64 บิต = 206 วินาที

เหตุใดสคริปต์นี้จึงทำงานแตกต่างกันไปตามเงื่อนไขข้างต้น แน่นอนว่าฉันไม่คาดหวังว่าเครื่องมือสคริปต์ 32 บิตจะทำงานในเบื้องหน้าว่าเร็วถึง 2X เท่าวิธีอื่น ๆ


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
ใช้เวลานานแค่ไหนในการนำเข้า arcpy ด้วยตนเอง มีข้อผิดพลาดในการจัดรูปแบบในโพสต์หรือไม่ ควรลอง: อยู่ในวง for หรือไม่
นาธาน W

2
ฉันคิดว่าประเด็นของ @ NathanW เกี่ยวกับการimport arcpyพิจารณาครั้งแรกนั้นคุ้มค่าเพราะดูเหมือนว่าเวลานั้นจำเป็นสำหรับ IDLE และ 64 บิตในการทดสอบทั้งสามของคุณ แต่การเพิ่มขึ้นเกือบสองนาทีดูเหมือนจะมากเกินไป ลองใช้เครื่องมือที่ไม่ทำอะไรมากไปกว่าการนำเข้า ArcPy
PolyGeo

3
ฉันจะค่อนข้างปลอดภัยที่จะบอกว่ามันเป็นimport arcpyเส้น ครั้งสุดท้ายที่ฉันใช้ arcpy มันช้าที่จะนำเข้าจากภายนอก ArcGIS จะมีการนำเข้าที่มีอยู่แล้วภายใน Python ภายในเพื่อที่การนำเข้าจะถูกแคชแล้ว
นาธาน W

3
@ นาธานและคนอื่น ๆ ถูกต้องอย่างแน่นอน การเรียกใช้โปรเซสผ่าน IDLE หรือ commandline จะได้รับความนิยมเมื่อคุณเรียกใช้ 'import arcpy' อย่างไรก็ตามคุณสามารถรับผลประโยชน์จากกระบวนการที่มีขนาดใหญ่มากซึ่งคุณได้รับเวลา 'ย้อนกลับ' ผ่านการปรับปรุงประสิทธิภาพ การเรียกใช้กระบวนการพื้นหลังก็มีผลกระทบต่อเวลาเช่นเดียวกับ ArcGIS ที่มีประสิทธิภาพจะเริ่มเซสชัน ArcMap อื่น สุดท้ายคุณมีตัวแปรอื่น ๆ ที่คุณต้องกำจัดในการทดลองเช่นอะไรคือความแตกต่างของฮาร์ดแวร์ระหว่างเครื่อง 32-64 บิตของคุณและกระบวนการอื่นใดที่ใช้ทรัพยากรในระหว่างการทดลอง ฯลฯ
MappaGnosis

2
+1 @JayLaura สามารถไปต่อและโปรไฟล์ได้ [ 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 อาจต้องทำการสร้างรายการโฟลเดอร์ในแต่ละครั้งเพื่อตรวจสอบความถูกต้องของเอาท์พุท FeatureClassToFeatureClass ของคุณ หากมีหลายรายการในโฟลเดอร์สิ่งนี้อาจทำให้ช้าลงได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.