ฉันสังเกตการทำงานผิดปกติด้วยสคริปต์การประมวลผล Python สคริปต์ (แนบ) ดำเนินการต่อไปนี้:
- ใช้เคอร์เซอร์ค้นหาเพื่อค้นหาโซน UTM ที่สอดคล้องกับคุณสมบัติรูปหลายเหลี่ยม
- สร้างวัตถุอ้างอิงเชิงพื้นที่โดยยึดตามผลลัพธ์ของเคอร์เซอร์ค้นหา
- แปลง. 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"
import arcpy
พิจารณาครั้งแรกนั้นคุ้มค่าเพราะดูเหมือนว่าเวลานั้นจำเป็นสำหรับ IDLE และ 64 บิตในการทดสอบทั้งสามของคุณ แต่การเพิ่มขึ้นเกือบสองนาทีดูเหมือนจะมากเกินไป ลองใช้เครื่องมือที่ไม่ทำอะไรมากไปกว่าการนำเข้า ArcPy
import arcpy
เส้น ครั้งสุดท้ายที่ฉันใช้ arcpy มันช้าที่จะนำเข้าจากภายนอก ArcGIS จะมีการนำเข้าที่มีอยู่แล้วภายใน Python ภายในเพื่อที่การนำเข้าจะถูกแคชแล้ว
General python doc
] [ docs.python.org/2/library/profile.html]และ [ stackexchange posting
] [ stackoverflow.com/questions/582336/… .