Dies ist eine ziemlich allgemeine Frage. Ich frage mich nur, welche Tipps und Tricks GIS-Programmierer verwendet haben, um arcpy-Skripte zu beschleunigen, die Sie in die Toolbox importieren und ausführen.
Ich arbeite täglich am Schreiben kleiner Skripte, um Nicht-GIS-Benutzern bei der Verarbeitung von GIS-Daten in meinem Büro zu helfen. Ich habe festgestellt, dass die ArcGIS 10.0-Verarbeitung im Allgemeinen langsamer als 9.3.1 ist und manchmal sogar langsamer wird, wenn ein Python-Skript ausgeführt wird.
Ich werde ein bestimmtes Beispiel eines Skripts auflisten, dessen Ausführung mehr als 24 Stunden dauert. Es ist eine Schleife, die den Bereich eines Rasters in einem Puffer für jede Form im Puffer tabellarisch darstellt. Der Puffer hat ungefähr 7000 Formen. Ich glaube nicht, dass es so lange dauern sollte. EIN
while x <= layerRecords:
arcpy.SetProgressorLabel("Tabulating Row: " + str(x) + " of " + str(ELClayerRecords))
arcpy.SelectLayerByAttribute_management(Buff,"NEW_SELECTION", "Recno = " + str(x)) # Selecting the record
TabulateArea(Buff, "Recno", MatGRID, "VALUE", ScratchWS + "/tab" + str(z) +".dbf", nMatGRIDc) # Tabulate the area of the single row
arcpy.AddMessage (" - Row: " + str(x) + " completed")
x = x + 1
z = z + 1
Bevor es jemand sagt, habe ich einen tabellarischen Bereich für den gesamten Puffer ausgeführt, aber er erzeugt Fehler, wenn er mit mehr als einem Datensatz ausgeführt wird. Es ist ein fehlerhaftes Werkzeug, aber ich muss es benutzen.
Wie auch immer, wenn jemand Ideen zur Optimierung oder Beschleunigung dieses Skripts hat, wäre er sehr dankbar. Andernfalls haben Sie irgendwelche Tricks zur Beschleunigung von Python, wenn Sie in ArcGIS verwendet werden?
quelle
Allgemeine Python-Optimierungstechniken können Ihnen viel Zeit sparen.
Eine wirklich gute Technik, um zu ermitteln, wo sich die Überhänge in Ihrem Skript befinden, ist die Verwendung des integrierten cProfile-Moduls:
Wenn Sie anhand eines kleinen Datenmusters testen, können Sie genau bestimmen, welche Funktionsaufrufe am meisten Zeit in Anspruch nehmen.
Allgemeine Hinweise für schnelleren Python-Code:
In Bezug auf Ihr Skript kann ich die ArcPy-Aspekte nicht kommentieren, da ich Arc nicht auf diesem Computer installiert habe. Vielleicht möchten Sie jedoch versuchen, eine for-Schleife anstelle einer while-Schleife zu verwenden, um festzustellen, ob sich hierdurch etwas verbessert. Auch x = x + 1 kann als x + = 1 geschrieben werden:
quelle
Stellen Sie sicher, dass Sie auf das interne Laufwerk des Computers schreiben. Das Erreichen des Netzwerks, wenn dies nicht erforderlich ist, kann die Verarbeitung erheblich verlangsamen. Es kann sogar schneller sein, die Daten als ersten Schritt im Prozess zu kopieren, um die nachfolgenden Lese- und Schreibvorgänge so schnell wie möglich durchzuführen
Das vollständige Ausführen des Skripts außerhalb von ArcMap kann viel schneller sein. Wenn während der Verarbeitung keine Karte erforderlich ist, verwenden Sie ArcMap nicht.
quelle
Calculate Value
Dialogfeld) schneller ausgeführt wird als das Ausführen desselben Skripts aus dem ArcPy-Fenster in ArcMap. Das ist jedoch nur eine anekdotische Beobachtung.Dies ist möglicherweise keine Antwort auf Ihre Frage zum Ausführen von ArcPy-Tools in ArcMap. Wenn ich jedoch eine komplexe Verarbeitung mit Geoverarbeitungs-Tools und Python ausführen muss, kann ich sie außerhalb des GIS-Systems mit dem IDE PyScripter ausführen . Ich habe festgestellt, dass es schneller läuft. Ich habe auch eine RAMDISK für kleine temporäre Ausgabedatensätze verwendet (ein bisschen wie die in_memory- Arbeitsbereich)
Nun, das sind meine Top-Tipps! :)
quelle
Versuchen Sie, arcpy.SetProgressorLabel zu kommentieren, und sehen Sie, wie viel Sie beschleunigen. Ich habe festgestellt, dass jede Bildschirmausgabe, die auf DOS-Daze zurückgeht, die Verarbeitungszeiten drastisch verlangsamt. Wenn Sie diese Ausgabe wirklich sehen müssen, versuchen Sie, sie bei jeder N-ten Schleife anzuzeigen.
quelle
Stellen Sie sicher, dass Sie alle
import xxxx
nicht verwendeten Zeilen entfernen .(dh wenn Sie noch keine mathematischen Funktionen verwenden
import Math
, dauert es einige Zeit, bis das Skript geladen ist.)Dies hat zwar keine großen Auswirkungen auf einzelne Skripte, die ausgeführt werden (wie z. B. Ihre), wirkt sich jedoch auf alle Skripte aus, die häufig und wiederholt ausgeführt werden.
quelle
import Math
war wohl ein schlechtes Beispiel. Das Laden einiger größerer ArcPy-Bibliotheken nimmt jedoch viel Zeit in Anspruch.