He estado observando un rendimiento inusual con un script de geoprocesamiento de Python. El script (adjunto) realiza las siguientes acciones:
- Use un cursor de búsqueda para buscar la zona UTM correspondiente a las características del polígono
- Crear objeto de referencia espacial basado en los resultados del cursor de búsqueda
- Convierta .csv en capa de entidades y luego en una clase de entidad de puntos
He notado tiempos de procesamiento marcadamente diferentes en función de cómo se ejecuta el script:
- Procesamiento de 32 bits usando IDLE = 203 segundos
- Herramienta de script de primer plano de procesamiento de 32 bits = 91 segundos
- Herramienta de script de fondo de procesamiento de 64 bits = 206 segundos
¿Por qué este script funcionaría de manera tan diferente dadas las condiciones anteriores? Ciertamente, no esperaría que la herramienta de script de 32 bits ejecutada en primer plano sea 2 veces más rápida que los otros métodos.
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
pena considerar primero el punto de @ NathanW porque parece que el tiempo solo es requerido por las rutas IDLE y 64bit de sus tres pruebas, pero agregar casi dos minutos parece excesivo. Intente ejecutar una herramienta que no hace más que importar la hora de ArcPy.import arcpy
línea. La última vez que usé arcpy fue lento para importar desde afuera. ArcGIS tendría eso ya importado en su Python interno, por lo que la importación ya está en caché.General python doc
] [ docs.python.org/2/library/profile.html] y [stackexchange posting
] [ stackoverflow.com/questions/582336/… .Respuestas:
@ Aaron: volviendo a publicar mi comentario anterior como respuesta según su consejo:
Podría ir más allá y perfil. [ Documento general de Python] y [publicación de intercambio de pila] .
Definitivamente interesado en escuchar lo que encuentra.
fuente
Tengo una teoria
Estoy pensando que el problema puede ser la validación de su salida o su entrada. Antes de que se ejecute una herramienta GP, arcpy valida los parámetros, por ejemplo, si la clase de entidad de salida ya existe.
Dentro de ArcMap, el contenido del espacio de trabajo (carpeta) se almacena en caché y la validación se puede realizar contra la "vista" del catálogo del espacio de trabajo, en memoria, rápidamente. Esto puede causar confusión si los conjuntos de datos se agregan utilizando una herramienta que no es ArcGIS, lo que requiere que se ejecute arcpy.RefreshCatalog () para sincronizar la vista del catálogo con el estado del espacio de trabajo (carpeta).
Si su carpeta es muy grande y se está ejecutando fuera de ArcGIS, es posible que arcpy tenga que generar una lista de carpetas cada vez para validar su salida FeatureClassToFeatureClass. Si hay muchos elementos en la carpeta, esto realmente podría ser lento.
fuente