Python Script Performance come strumento ArcGIS contro stand-alone


11

Qualcuno ha studiato la differenza nell'esecuzione di uno script Python in ArcToolbox rispetto a uno script autonomo? Ho dovuto scrivere uno script veloce e sporco per convertire un set di immagini RGB in una singola banda estraendo la banda 1. Come script autonomo, leggendo e scrivendo sul mio PC, elabora 1000 immagini di dimensioni identiche in circa 350 secondi. L'esecuzione dello stesso script da ArcToolbox richiede circa 1250 secondi.

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()])

Ho aggiunto del codice per tracciare quando ogni riquadro termina l'elaborazione ed esportare i risultati come CSV. La conversione del tempo di fine in tempo di elaborazione si verifica in Excel. Rappresentando graficamente i risultati, il tempo di elaborazione è all'incirca lo stesso per ogni riquadro di uno script, ma il tempo di elaborazione aumenta linearmente quando eseguito come strumento ArcGIS.

inserisci qui la descrizione dell'immagine

Se i dati vengono letti e scritti su un dispositivo di rete, l'aumento sembra essere esponenziale.

Non sto cercando modi alternativi per svolgere questo particolare compito. Voglio capire perché le prestazioni di questo script peggiorano nel tempo quando vengono eseguite come strumento ArcGIS , ma non come script autonomo. Ho notato questo comportamento anche con altri script.


1
python al di fuori di ArcGIS è molto più veloce. Uso la finestra di Python solo quando eseguo script molto semplici, o voglio la capacità di trascinare e rilasciare oggetti nel terminale. La mia ipotesi è che il terminale ArcGIS controlli l'allocazione delle risorse dell'interprete perché l'intero pacchetto software necessita anche di Python per funzionare.
Atxgis,

la mia raccomandazione (in base alla mia esperienza, non ai dati sulle prestazioni quantificati come quelli forniti) è di utilizzare Arcpy solo come ultima risorsa. Nell'esempio sopra, qualsiasi interprete Python senza arcpy è abbastanza in grado di filtrare in modo efficiente una directory per i raster e copiarli in una nuova cartella
Paul H

1
Quanta differenza tra geoprocessing in background x64 e 32 bit in-process?
Kirk Kuykendall,

Quando dici che stai "eseguendo uno script Python in ArcToolbox" intendi che stai eseguendo uno strumento Python Script? In tal caso, lo stai eseguendo senza parametri per il test?
PolyGeo

@PolyGeo sì, ho creato uno strumento di script in un toolbox ArcGIS. Ha preso 1 parametro, da cui derivano in_folder e out_folder. Ciò viene fatto prima dell'inizio delle misurazioni di temporizzazione.
Bjorn,

Risposte:


1

Questa è la mia opinione sulle cose: l'esecuzione di uno script da ArcToolbox comporta tutti i tipi di costi nascosti mentre gli strumenti stanno cercando di interagire / aggiornare l'applicazione principale (ArcMap). Tutti gli strumenti aggiorneranno i metadati, alcuni tenteranno di aggiornare la finestra della mappa e MXD sta registrando tutti gli strumenti che esegui nel pannello della cronologia del geoprocessing. Nessuno di questi impatti nascosti si verifica durante l'esecuzione in un IDE.

Quindi eseguire un loop solo 1000 volte significa che MXD sta memorizzando 1000 log. Dato che ArcMap è un software proprietario chiuso, non abbiamo idea di come stiano andando avanti i meccanismi di registrazione dei registri di elaborazione e potrebbe essere la fase di limitazione della velocità se la struttura dei dati utilizzata non è in grado di gestire ripetizioni di grandi dimensioni?

Un altro problema potrebbe essere che ArcMap è un'applicazione guidata dagli eventi, le cose accadono quando si verificano eventi, esegui la panoramica della mappa e la mappa si aggiorna, aggiungi dati e un pulsante abilita. Immagino sia possibile che gli strumenti stiano scatenando ogni sorta di eventi e l'applicazione venga "sopraffatta" da loro quando gli strumenti vengono utilizzati in modo ripetitivo, ma sono io a speculare?

Penso che si debbano aumentare i pro e i contro, esporre uno script come uno strumento di script lo rende facile da usare nell'ambiente ArcMap, specialmente per gli utenti non esperti. Questo è un problema importante se vuoi che il tuo codice sia adottato. Crunching dei numeri hardcore solo da te senza la necessità di eseguire alcun controllo di qualità intermedio, quindi esegui lo script nel tuo IDE preferito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.