Tôi đã quan sát hiệu suất bất thường với một kịch bản xử lý địa lý Python. Kịch bản (đính kèm) thực hiện các hành động sau:
- Sử dụng con trỏ tìm kiếm để tra cứu vùng UTM tương ứng với các tính năng đa giác
- Tạo đối tượng tham chiếu không gian dựa trên kết quả con trỏ tìm kiếm
- Chuyển đổi .csv thành lớp đối tượng và sau đó thành lớp đối tượng điểm
Tôi đã nhận thấy thời gian xử lý khác nhau rõ rệt dựa trên cách chạy tập lệnh:
- Xử lý 32 bit bằng IDLE = 203 giây
- Công cụ kịch bản tiền cảnh xử lý 32 bit = 91 giây
- Công cụ kịch bản nền xử lý 64 bit = 206 giây
Tại sao kịch bản này sẽ thực hiện rất khác nhau với các điều kiện trên? Tôi chắc chắn sẽ không mong đợi công cụ tập lệnh 32 bit chạy ở nền trước sẽ nhanh gấp 2 lần các phương thức khác.
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
đáng để xem xét trước tiên vì dường như thời gian chỉ được yêu cầu bởi các tuyến IDLE và 64 bit trong ba bài kiểm tra của bạn, nhưng thêm gần hai phút có vẻ quá mức. Hãy thử chạy một công cụ không có gì nhiều ngoài thời gian nhập ArcPy.
import arcpy
dòng. Lần trước tôi sử dụng arcpy, nó rất chậm để nhập từ bên ngoài. ArcGIS sẽ có cái đó đã được nhập trong Python bên trong của nó để quá trình nhập đã được lưu vào bộ đệm.
General python doc
] [ docs.python.org/2/l Library / profile.html] và [ stackexchange posting
] [ stackoverflow.com/questions/582336/ chất .