Python Script Performance como una herramienta ArcGIS versus autónomo

11

¿Alguien ha estudiado la diferencia en la ejecución de un script de Python en ArcToolbox frente a un script independiente? Tuve que escribir un script rápido y sucio para convertir un conjunto de imágenes RGB en una sola banda extrayendo la banda 1. Como un script independiente que lee y escribe en mi PC, procesa 1000 imágenes de tamaño idéntico en aproximadamente 350 segundos. Ejecutar el mismo script desde ArcToolbox toma aproximadamente 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()])

Agregué un código para rastrear cuando cada mosaico termina de procesarse y exportar los resultados como un CSV. La conversión del tiempo de finalización al tiempo de procesamiento ocurre en Excel. Graficando los resultados, el tiempo de procesamiento es aproximadamente el mismo para cada mosaico que un script, pero el tiempo de procesamiento aumenta linealmente cuando se ejecuta como una herramienta ArcGIS.

ingrese la descripción de la imagen aquí

Si las lecturas y escrituras de datos son para un dispositivo de red, el aumento parece ser exponencial.

No estoy buscando formas alternativas de lograr esta tarea en particular. Quiero entender por qué el rendimiento de este script se degrada con el tiempo cuando se ejecuta como una herramienta ArcGIS , pero no como un script independiente. También he notado este comportamiento con otros scripts.

Bjorn
fuente
1
Python fuera de ArcGIS es mucho más rápido. Solo uso la ventana de Python cuando hago scripts muy simples, o quiero la capacidad de arrastrar y soltar elementos en el terminal. Supongo que el terminal ArcGIS controla la asignación de recursos del intérprete porque todo el paquete de software también necesita que Python funcione.
atxgis
mi recomendación (según mi experiencia, no datos de rendimiento cuantificados como los que ha proporcionado) es usar arcpy como último recurso. En el ejemplo anterior, cualquier intérprete de Python sin arcpy es capaz de filtrar eficientemente un directorio para rásteres y copiarlos en una nueva carpeta
Paul H
1
¿Cuánta diferencia hay entre el geoprocesamiento de fondo x64 y el de 32 bits en proceso?
Kirk Kuykendall el
Cuando dice que está "ejecutando un script Python en ArcToolbox", ¿quiere decir que está ejecutando una herramienta Python Script? Si es así, ¿lo está ejecutando sin parámetros para su prueba?
PolyGeo
@PolyGeo sí, creé una herramienta de script en una caja de herramientas de ArcGIS. Tomó 1 parámetro, del cual se derivan in_folder y out_folder. Todo eso se hace antes de que comiencen las mediciones de tiempo.
Bjorn el

Respuestas:

1

Esta es mi opinión sobre las cosas: ejecutar un script desde ArcToolbox incurre en todo tipo de costos ocultos a medida que las herramientas intentan interactuar / actualizar la aplicación principal (ArcMap). Todas las herramientas actualizarán los metadatos, algunos intentan actualizar la ventana del mapa y el MXD está grabando cada herramienta que ejecuta en el panel de historial de geoprocesamiento. Ninguno de estos impactos ocultos ocurre cuando se ejecuta en un IDE.

Entonces, ejecutar un bucle solo 1000 veces significa que el MXD está almacenando 1000 registros. Como ArcMap es un software patentado cerrado, no tenemos idea de cómo está funcionando la mecánica de registro de los registros de procesamiento y puede ser el paso limitante de la velocidad.

Otro problema sería que ArcMap es una aplicación impulsada por eventos, las cosas suceden cuando ocurren eventos, desplaza el mapa y el mapa se actualiza, agrega datos y se activa un botón. Supongo que es posible que las herramientas estén activando todo tipo de eventos y que la aplicación se vea "abrumada" por ellas cuando las herramientas se usan de manera repetitiva, pero ¿eso es lo que estoy especulando?

Creo que uno tiene que subir los pros y los contras, exponer un script como herramienta de script hace que sea fácil de usar en el entorno de ArcMap, especialmente para usuarios no expertos. Esa es una cuestión importante si desea que se adopte su código. Números duros crujientes solo por usted sin la necesidad de hacer ningún control de calidad intermedio y luego ejecute el script en su IDE preferido.

Hornbydd
fuente