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.
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.
Antworten:
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.
quelle