Python-Skriptleistung als ArcGIS-Tool im Vergleich zu Standalone

11

Hat jemand den Unterschied zwischen dem Ausführen eines Python-Skripts in ArcToolbox und dem Ausführen eines eigenständigen Skripts untersucht? Ich musste ein schnelles und schmutziges Skript schreiben, um eine Reihe von RGB-Bildern durch Extrahieren von Band 1 in ein einzelnes Band zu konvertieren. Als eigenständiges Skript, das auf meinem PC liest und schreibt, verarbeitet es 1000 Bilder gleicher Größe in etwa 350 Sekunden. Das Ausführen desselben Skripts in ArcToolbox dauert ungefähr 1250 Sekunden.

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

Ich habe Code hinzugefügt, um zu verfolgen, wann jede Kachel die Verarbeitung beendet hat, und die Ergebnisse als CSV zu exportieren. Die Konvertierung der Endzeit in die Verarbeitungszeit erfolgt in Excel. Bei der grafischen Darstellung der Ergebnisse ist die Verarbeitungszeit für jede Kachel als Skript ungefähr gleich, aber die Verarbeitungszeit erhöht sich linear, wenn sie als ArcGIS-Tool ausgeführt wird.

Geben Sie hier die Bildbeschreibung ein

Wenn die Daten auf ein Netzwerkgerät gelesen und geschrieben werden, scheint der Anstieg exponentiell zu sein.

Ich suche nicht nach alternativen Wegen, um diese spezielle Aufgabe zu erfüllen. Ich möchte verstehen, warum sich die Leistung dieses Skripts im Laufe der Zeit verschlechtert, wenn es als ArcGIS-Tool ausgeführt wird , jedoch nicht als eigenständiges Skript. Ich habe dieses Verhalten auch bei anderen Skripten bemerkt.

Björn
quelle
1
Python außerhalb von ArcGIS ist viel schneller. Ich verwende das Python-Fenster nur, wenn ich sehr einfache Skripte ausführe oder Elemente per Drag & Drop in das Terminal ziehen möchte. Vermutlich steuert das ArcGIS-Terminal die Ressourcenzuweisung des Interpreters, da das gesamte Softwarepaket zum Betrieb auch Python benötigt.
Atxgis
Meine Empfehlung (basierend auf meiner Erfahrung, nicht quantifizierten Leistungsdaten, wie Sie sie angegeben haben) ist, arcpy nur als letzten Ausweg zu verwenden. Im obigen Beispiel kann jeder Python-Interpreter ohne arcpy ein Verzeichnis für Raster effizient filtern und in einen neuen Ordner kopieren
Paul H
1
Wie viel Unterschied zwischen x64-Hintergrund-Geoverarbeitung und In-Process-32-Bit?
Kirk Kuykendall
Wenn Sie sagen, dass Sie "ein Python-Skript in ArcToolbox ausführen", meinen Sie damit, dass Sie ein Python-Skript-Tool ausführen? Wenn ja, führen Sie es ohne Parameter für Ihren Test aus?
PolyGeo
@PolyGeo Ja, ich habe ein Skript-Tool in einer ArcGIS-Toolbox erstellt. Es wurde 1 Parameter benötigt, von dem in_folder und out_folder abgeleitet werden. Dies geschieht alles, bevor die Timing-Messungen beginnen.
Björn

Antworten:

1

Dies ist meine Sichtweise: Das Ausführen eines Skripts in ArcToolbox verursacht alle möglichen versteckten Kosten, da Tools versuchen, mit der Hauptanwendung (ArcMap) zu interagieren / diese zu aktualisieren. Alle Tools aktualisieren Metadaten, einige versuchen, das Kartenfenster zu aktualisieren, und das MXD zeichnet jedes Tool auf, das Sie im Geoverarbeitungsverlaufsfenster ausführen. Keine dieser versteckten Auswirkungen tritt auf, wenn sie in einer IDE ausgeführt werden.

Wenn Sie also nur 1000 Mal eine Schleife ausführen, speichert der MXD 1000 Protokolle. Da es sich bei ArcMap um eine geschlossene proprietäre Software handelt, haben wir keine Ahnung, wie die Mechanismen zum Aufzeichnen von Verarbeitungsprotokollen tatsächlich ablaufen.

Ein weiteres Problem wäre, dass ArcMap eine ereignisgesteuerte Anwendung ist, Dinge passieren, wenn Ereignisse auftreten, Sie die Karte schwenken und die Karte aktualisiert, Daten hinzufügen und eine Schaltfläche aktivieren. Ich denke, es ist möglich, dass Tools alle möglichen Ereignisse auslösen und die Anwendung von ihnen "überfordert" wird, wenn Tools wiederholt verwendet werden, aber das spekuliere ich?

Ich denke, man muss die Vor- und Nachteile deutlich machen. Wenn ein Skript als Skriptwerkzeug verfügbar gemacht wird, ist es in der ArcMap-Umgebung einfach zu verwenden, insbesondere für Nicht-Power-User. Dies ist ein wichtiges Problem, wenn Sie möchten, dass Ihr Code übernommen wird. Hardcore-Zahlen, die nur von Ihnen eingegeben werden, ohne dass eine Zwischenqualitätskontrolle durchgeführt werden muss. Führen Sie dann das Skript in Ihrer bevorzugten IDE aus.

Hornbydd
quelle