Eu tenho observado desempenho incomum com um script de geoprocessamento Python. O script (anexado) executa as seguintes ações:
- Use um cursor de pesquisa para procurar a zona UTM correspondente aos recursos de polígono
- Criar objeto de referência espacial com base nos resultados do cursor de pesquisa
- Converter .csv na camada de recurso e, em seguida, em uma classe de recurso de ponto
Percebi tempos de processamento marcadamente diferentes, com base em como o script é executado:
- Processamento de 32 bits usando IDLE = 203 segundos
- Ferramenta de script de primeiro plano de processamento de 32 bits = 91 segundos
- Ferramenta de script em segundo plano de processamento de 64 bits = 206 segundos
Por que esse script teria um desempenho tão diferente, dadas as condições acima? Eu certamente não esperaria que a ferramenta de script de 32 bits executada em primeiro plano fosse 2X mais rápida que os outros 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
vale a pena considerar o argumento de @ NathanW primeiro, porque parece que o tempo é necessário apenas pelas rotas IDLE e 64 bits de seus três testes, mas adicionar quase dois minutos parece excessivo. Tente executar uma ferramenta que não faz nada além de importar a ArcPy.import arcpy
linha. A última vez que usei o arcpy demorou a importar do exterior. O ArcGIS já teria importado em seu Python interno para que a importação já esteja em cache.General python doc
] [ docs.python.org/2/library/profile.html] e [stackexchange posting
] [ stackoverflow.com/questions/582336/… .Respostas:
@ Aaron: republicando meu comentário anterior como resposta com base em seus conselhos:
Poderia ir mais longe e perfil. [Documento geral do python] e [postagem de troca de pilha] .
Definitivamente interessado em ouvir o que ele encontra.
fonte
Eu tenho uma teoria
Estou pensando que o problema pode ser a validação da sua saída ou da sua entrada. Antes de uma ferramenta GP ser executada, o arcpy valida parâmetros, por exemplo, se a classe do recurso de saída já existe.
No ArcMap, o conteúdo da área de trabalho (pasta) é todo armazenado em cache e a validação pode ser feita com base na "visualização" do catálogo da área de trabalho - na memória - rapidamente. Isso pode causar confusão se os conjuntos de dados forem adicionados usando uma ferramenta que não seja do ArcGIS, exigindo a execução de um arcpy.RefreshCatalog () para sincronizar a exibição do catálogo com o estado do espaço de trabalho (pasta).
Se sua pasta é muito grande e você está executando fora do ArcGIS, o arcpy pode estar tendo que gerar uma lista de pastas a cada vez para validar sua saída do FeatureClassToFeatureClass. Se houver muitos itens na pasta, isso pode ficar muito lento.
fonte