Alguém estudou a diferença na execução de um script Python no ArcToolbox versus como um script autônomo? Eu tive que escrever um script rápido e sujo para converter um conjunto de imagens RGB em banda única, extraindo a banda 1. Como um script independente, lendo e gravando no meu PC, ele processa 1000 imagens de tamanho idêntico em cerca de 350 segundos. A execução do mesmo script no ArcToolbox leva cerca de 1250 segundos.
import arcpy
import csv
from os import path
arcpy.env.workspace = in_folder
image_list = arcpy.ListRasters()
#Create a CSV file for timing output
with open(outfile, 'wb') as c:
cw = csv.writer(c)
cw.writerow(['tile_name', 'finish_time'])
#Start the timer at 0
start_time = time.clock()
for image in image_list:
#Extract band 1 to create a new single-band raster
arcpy.CopyRaster_management(path.join(image, 'Band_1'), path.join(out_folder, image))
cw.writerow([image, time.clock()])
Eu adicionei um código para rastrear quando cada bloco termina o processamento e exportar os resultados como um CSV. A conversão do tempo de término para o tempo de processamento ocorre no Excel. Representando graficamente os resultados, o tempo de processamento é aproximadamente o mesmo para cada bloco como um script, mas o tempo de processamento aumenta linearmente quando executado como uma ferramenta ArcGIS.
Se os dados forem lidos e gravados em um dispositivo de rede, o aumento parecerá exponencial.
Não estou procurando maneiras alternativas de realizar essa tarefa específica. Quero entender por que o desempenho desse script se degrada com o tempo ao ser executado como uma ferramenta ArcGIS , mas não como um script independente. Percebi esse comportamento com outros scripts também.
Respostas:
Esta é a minha opinião: executar um script do ArcToolbox incorre em todos os tipos de custos ocultos, pois as ferramentas estão tentando interagir / atualizar o aplicativo principal (ArcMap). Todas as ferramentas atualizam os metadados, algumas tentam atualizar a janela do mapa e o MXD está registrando todas as ferramentas executadas no painel de histórico de geoprocessamento. Nenhum desses impactos ocultos ocorre ao executar em um IDE.
Portanto, executar um loop apenas 1000 vezes significa que o MXD está armazenando 1000 logs. Como o ArcMap é um software proprietário fechado, não temos idéia de como a mecânica dos registros de processamento de gravação está realmente acontecendo e pode ser a etapa de limitação de taxa. A estrutura de dados que eles empregaram não é capaz de lidar com grandes repetições?
Outra questão seria que o ArcMap é um aplicativo orientado a eventos, as coisas acontecem quando os eventos ocorrem, você faz uma panorâmica do mapa e o mapa é atualizado, adiciona dados e um botão é ativado. Acho que é possível que as ferramentas disparem todos os tipos de eventos e o aplicativo fique "sobrecarregado" por elas quando as ferramentas são usadas de forma repetitiva, mas sou eu quem está especulando?
Acho que é preciso aumentar os prós e os contras, expor um script como uma ferramenta de script facilita o uso no ambiente do ArcMap, especialmente para usuários que não são avançados. Essa é uma questão importante se você deseja que seu código seja adotado. Análise de número incondicional apenas por você, sem a necessidade de fazer qualquer controle de qualidade intermediário e, em seguida, execute o script no seu IDE preferido.
fonte