Desempenho de scripts Python como uma ferramenta ArcGIS versus autônoma

11

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.

insira a descrição da imagem aqui

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.

Bjorn
fonte
1
python fora do ArcGIS é muito mais rápido. Eu uso apenas a janela python ao executar scripts muito simples ou quero a capacidade de arrastar e soltar itens no terminal. Meu palpite é que o terminal ArcGIS controla a alocação de recursos do intérprete, porque todo o pacote de software também precisa do python para operar.
Atxgis 19/04/19
minha recomendação (com base na minha experiência, e não nos dados quantificados de desempenho que você forneceu) é usar o arcpy apenas como último recurso. No exemplo acima, qualquer interpretador Python sem arcpy é bem capaz de filtrar de forma eficiente um diretório para rasters e copiá-los para uma nova pasta
Paul H
1
Quanta diferença entre o geoprocessamento em segundo plano x64 e o processo de 32 bits?
precisa saber é o seguinte
Quando você diz que está "executando um script Python no ArcToolbox", quer dizer que está executando uma ferramenta de script Python? Se sim, você está executando sem parâmetros para o seu teste?
PolyGeo
@PolyGeo sim, criei uma ferramenta de script em uma caixa de ferramentas do ArcGIS. Foi necessário 1 parâmetro, do qual derivam in_folder e out_folder. Tudo isso é feito antes do início das medições de tempo.
Bjorn

Respostas:

1

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.

Hornbydd
fonte