Bir Python geoprocessing script ile olağandışı bir performans gözlemliyorum. (Attached) betiği aşağıdaki eylemleri gerçekleştirir:
- Çokgen özelliklerine karşılık gelen UTM bölgesini aramak için bir arama imleci kullanın
- Arama imleci sonuçlarına dayalı olarak uzamsal referans nesnesi oluşturma
- .Csv dosyasını unsur katmanına ve sonra bir nokta unsur sınıfına dönüştürme
Betiğin nasıl çalıştığına bağlı olarak önemli ölçüde farklı işlem süreleri fark ettim:
- IDLE = 203 saniye kullanarak 32 bit işleme
- 32 bit işleme ön plan komut dosyası aracı = 91 saniye
- 64 bit işleme arka plan komut dosyası aracı = 206 saniye
Bu komut dosyası yukarıdaki koşullar göz önüne alındığında neden bu kadar farklı çalışsın? Kesinlikle ön planda çalıştırmak 32-bit komut dosyası aracı diğer yöntemler kadar hızlı 2X beklemem.
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
dikkate alınmaya değer çünkü zamanın üç testinizin IDLE ve 64bit rotaları için gerekli olduğu görülüyor, ancak yaklaşık iki dakika eklemek aşırı görünüyor. ArcPy'nin içe aktarılmasından daha fazlasını yapmayan bir araç çalıştırmayı deneyin.
import arcpy
Çizgi olduğunu söylemek oldukça güvenlidir . Arcpy'yi en son kullandığımda dışarıdan ithalat yavaştı. ArcGIS, dahili Python'a zaten içe aktarılmış olur, böylece içe aktarma zaten önbelleğe alınır.
General python doc
] [ docs.python.org/2/library/profile.html] ve [ stackexchange posting
] [ stackoverflow.com/questions/582336/… .