Esta é uma pergunta bastante geral. Só estou pensando em quais dicas e truques os programadores de GIS usaram para acelerar os scripts arqueados que você importa na caixa de ferramentas e executa.
Eu trabalho quase todos os dias escrevendo pequenos scripts para ajudar usuários não GIS no meu escritório a processar dados GIS. Descobri que o processamento do ArcGIS 10.0 em geral é mais lento que o 9.3.1 e às vezes fica ainda mais lento ao executar um script python.
Vou listar um exemplo específico de um script que leva mais de 24 horas para ser executado. É um loop que tabula a área de uma varredura em um buffer para cada forma no buffer. O buffer tem cerca de 7000 formas. Não acredito que deva durar tanto tempo. UMA
while x <= layerRecords:
arcpy.SetProgressorLabel("Tabulating Row: " + str(x) + " of " + str(ELClayerRecords))
arcpy.SelectLayerByAttribute_management(Buff,"NEW_SELECTION", "Recno = " + str(x)) # Selecting the record
TabulateArea(Buff, "Recno", MatGRID, "VALUE", ScratchWS + "/tab" + str(z) +".dbf", nMatGRIDc) # Tabulate the area of the single row
arcpy.AddMessage (" - Row: " + str(x) + " completed")
x = x + 1
z = z + 1
Antes que alguém diga, eu executei a área tabular em todo o buffer, mas produz erros se executado em mais de um registro. É uma ferramenta defeituosa, mas eu tenho que usá-la.
De qualquer forma, se alguém tiver alguma idéia de como otimizar ou acelerar esse script, seria muito apreciado. Caso contrário, você tem algum truque de aceleração para python, quando usado no ArcGIS?
fonte
Técnicas gerais de otimização de python podem economizar uma quantidade substancial de tempo.
Uma técnica realmente boa para saber onde estão os atrasos no seu script é usar o módulo cProfile embutido:
Testar usando uma pequena amostra de dados permitirá identificar quais chamadas de função estão demorando mais tempo.
Ponteiros gerais para código python mais rápido:
Com relação ao seu script, não posso comentar sobre os aspectos do ArcPy, pois não tenho o Arc instalado neste computador, mas você pode tentar usar um loop for em vez de um while while para ver se isso melhora alguma coisa. Também x = x + 1 pode ser escrito como x + = 1:
fonte
Verifique se você está gravando na unidade interna do computador. Alcançar a rede quando não é necessário pode realmente atrasar o processamento. Pode ser ainda mais rápido copiar os dados como a primeira etapa do processo para manter as leituras e gravações subsequentes o mais rápido possível
Executar o script completamente fora do ArcMap pode ser muito mais rápido. Se um mapa não for necessário durante o processamento, não use o ArcMap.
fonte
Calculate Value
caixa de diálogo) será processada mais rapidamente do que a execução do mesmo script na janela do ArcPy no ArcMap. Isso é apenas uma observação anedótica.Isso pode não responder à sua pergunta sobre a execução de ferramentas ArcPy no ArcMap, mas quando eu preciso fazer algum processamento de carne com ferramentas de geoprocessamento e Python, eu tendem a executá-lo fora do sistema GIS usando o IDE PyScripter . Eu descobri que corre mais rápido. Também empreguei um RAMDISK para pequenos conjuntos de dados de saída temporária (um pouco como o espaço de trabalho in_memory )
Bem, elas são minhas principais dicas! :)
fonte
Tente comentar arcpy.SetProgressorLabel e veja quanto você acelera. Descobri que qualquer saída de tela, voltando ao DOS, diminui drasticamente o tempo de processamento. Se você realmente precisa ver essa saída, tente mostrá-la a cada enésimo laço.
fonte
Certifique-se de remover as
import xxxx
linhas que não estão sendo usadas.(ou seja, se você ainda não estiver usando nenhuma função matemática
import Math
, isso levará algum tempo a partir do carregamento do script)Embora isso não tenha um grande impacto em scripts únicos executados (como o seu), afetará todos os scripts executados com frequência e repetição.
fonte
import Math
foi provavelmente um mau exemplo. Algumas das maiores bibliotecas do ArcPy, no entanto, levam uma quantidade considerável de tempo para serem carregadas.