Ich programmiere jetzt seit einigen Monaten mit Python und habe einige einigermaßen komplexe Skripte für hauptsächlich Geoverarbeitungsaufgaben entwickelt. Davon abgesehen lerne ich immer noch viel, da ich einen SQL / VBA / VBScript-Hintergrund habe.
Ich weiß, dass kompilierter Code in der Regel schneller ausgeführt wird als Code, der von einem Sprachinterpreter verarbeitet werden muss. Daher bin ich an der Möglichkeit interessiert, ein Geoverarbeitungs-Python-Skript in eine EXE-Datei für die Arbeit mit Big Data zu kompilieren.
Ist das überhaupt möglich? Wenn dies der Fall ist, wie kann ein Python-Skript (.py), das die arcgisscript- oder arcpy-Module importiert, am besten kompiliert werden?
Ich habe ein paar Minuten lang versucht, das zu finden, was ich tun möchte, und die Suche ergab unter anderem den folgenden Artikel: http://www.ehow.com/how_2091641_compile-python-code.html
Der Compiler schien zu funktionieren, aber beim Ausführen der resultierenden .EXE-Datei trat ein kryptischer Fehler auf, der besagte, dass einige Dateien nicht verfügbar waren.
Das Python-Skript führt einigermaßen gut von der Befehlszeile aus, aber ich frage mich, ob ich eine leichte Verbesserung feststellen könnte, wenn ich die .py-Datei kompilieren könnte. Auch hier arbeite ich mit einigen großen Datensätzen, deren Verarbeitung +20 Stunden in Anspruch nimmt (Abgrenzung von Wassereinzugsgebieten von Probenorten mit Eingangswasserqualität). Ich werde alles nehmen, was ich für Verbesserungen tun kann.
Das Skript lief 10% schneller außerhalb von ArcGIS von der Befehlszeile einen Testsatz von Sites , die gegen die Einstellung der Skript nach oben als Script - Tool in einer neuen Toolbox in ArcCatalog. Ich habe das Skript über die Befehlszeile ausgeführt, ohne dass eine Instanz von ArcGIS auf einem dedizierten Computer geöffnet war.
Ist es also möglich, Python-Skripte zu kompilieren, die das arcgisscripting-Modul importieren und die ArcToolBox-Tools aufrufen?
BEARBEITEN
Danke für die Eingabe, das ist hilfreich für mich. Das Skript ist hauptsächlich eine Möglichkeit, eine Reihe von ArcGIS-Tools zu koordinieren und in gewünschten Formaten / Positionen / mit entsprechender Zuordnung auszugeben. Ich habe bereits einiges an Fett abgeschnitten, indem ich in einen Scratch-Ordner anstelle einer Scratch-Personal-Geodatabase für einige Zwischen-Raster-Dateien geschrieben habe, damit sie im ESRI-GRID-Format im Vergleich zum IMG-Format gespeichert werden können. Ich werde jedoch die Profiler-Vorschläge überprüfen.
In meinem Büro gibt es einige, die Python fragen: "Dieser kompilierte Code ist so viel schneller als Code, der durch einen Interpreter läuft", hauptsächlich im Vergleich zu beispielsweise einem kompilierten Visual Basic-Programm oder einem VB.NET-Programm, aber das ist ein guter Punkt Die Werkzeuge werden in beiden Fällen einige Zeit in Anspruch nehmen. Und es scheint, als ob bei heutigen Computern der interpretierte Code nicht so viel langsamer ist als der kompilierte Code, um diese zusätzliche Meile zu rechtfertigen.
EDIT - Update zur Optimierung des Programms mit Rasterformaten.
Ich wollte meine "Optimierung" dieses Python-Programms fortsetzen und konnte 2 Stunden Verarbeitungszeit einsparen, indem ich Zwischen-Raster im GRID-Format anstelle einer persönlichen Geodatabase schrieb. Darüber hinaus wurde der Speicherplatzbedarf auf der Festplatte erheblich reduziert. Der ursprüngliche Lauf, in dem ich alle Raster geschrieben habe (und es handelte sich nur um Punkt-Features, die in Raster konvertiert wurden, und dann um Watershed-Raster), ergab 37,1 GB Daten nur für diese Dateien. Das Schreiben der letzten beiden Datenausgaben in einen Ordner im GRID-Format wurde auf 667 MB Daten reduziert.
Ich wäre gespannt, wie eine GDB-Datei mit diesen Daten umgehen würde, allerdings hauptsächlich in Bezug auf die Größe der Daten. Die Verkürzung der Verarbeitungszeit von 9,5 auf 7,5 Stunden reicht jedoch aus, um Raster außerhalb von Geodatabases im GRID-Format zu verarbeiten.