Ho programmato con Python per diversi mesi e ho sviluppato alcuni script ragionevolmente complessi per attività principalmente di geoprocessing. Detto questo, sto ancora imparando molto dal momento che provengo da un background SQL / VBA / VBScript.
So che il codice compilato in genere viene eseguito più velocemente del codice che deve essere elaborato da un interprete di lingue, quindi sono interessato alla possibilità di compilare uno script Python geoprocessore in un file .EXE per lavorare con i big data.
È possibile? In tal caso, qual è il modo migliore per compilare uno script Python (.py) che sta importando i moduli arcgisscripting o arcpy?
Ho impiegato alcuni minuti a cercare quello che volevo fare e la ricerca ha restituito questo articolo, tra gli altri: http://www.ehow.com/how_2091641_compile-python-code.html
Il compilatore sembrava funzionare, ma dopo aver eseguito il file .EXE risultante, ha generato un errore criptico che diceva che alcuni file non erano disponibili.
Lo script Python esegue ciò che sembra ragionevolmente bene dalla riga di comando, ma mi chiedo se potrei vedere qualche leggero miglioramento se fossi in grado di compilare il file .py. Ancora una volta, sto lavorando con alcuni grandi set di dati che impiegano +20 ore per l'elaborazione (delineando gli spartiacque dai siti di campionamento della qualità dell'acqua di input). Prenderò tutto ciò che posso in termini di miglioramenti.
Lo script è stato eseguito il 10% più rapidamente al di fuori di ArcGIS dalla riga di comando utilizzando un set di test di siti rispetto all'impostazione dello script come strumento di script in un nuovo toolbox in ArcCatalog. Ho eseguito lo script dalla riga di comando senza alcuna istanza di ArcGIS aperta su una macchina dedicata.
Quindi, è possibile compilare script Python che importano il modulo arcgisscripting e che chiamano strumenti ArcToolBox?
MODIFICARE
Grazie per l'input, questo è utile per me. Lo script è in gran parte un modo per coordinare una serie di strumenti ArcGIS e per produrre nei formati / posizioni desiderati / con l'attribuzione appropriata. Ho già ridotto un po 'di grasso, penso scrivendo in una cartella scratch anziché in un geodatabase personale scratch per alcuni file raster temporanei in modo che possano essere memorizzati nel formato ESRI GRID rispetto al formato IMG. Vedrò comunque i suggerimenti del profiler.
Ci sono alcuni nel mio ufficio che pongono domande a Python dicendo "che il codice compilato è molto più veloce del codice che scorre attraverso un interprete" principalmente rispetto, per esempio, a un programma compilato Visual Basic o VB.NET, ma è un buon punto che gli strumenti impiegheranno del tempo in entrambi i modi. E sembra che con le attuali macchine di calcolo che interpretare il codice potrebbe non essere molto più lento del codice compilato per giustificare quel miglio in più.
EDIT - aggiornamento sull'ottimizzazione del programma con formati raster.
Volevo dare seguito alla mia "ottimizzazione" di questo programma Python e sono stato in grado di radere 2 ore di tempo di elaborazione scrivendo raster intermedi in formato GRID anziché in un geodatabase personale. Non solo, si è verificata una significativa RIDUZIONE del consumo di spazio su disco per le dimensioni dei dati. La corsa originale che ho fatto scrivendo tutti i raster (ed erano solo funzioni punto convertite in raster e quindi raster spartiacque) ha prodotto 37,1 GB di dati solo per quei file. La scrittura di questi ultimi due output di dati in una cartella in formato GRID è stata ridotta a 667 MB di dati.
Sarei curioso di vedere come un file GDB gestirà questi dati anche se principalmente in base alla dimensione dei dati. Tuttavia, ridurre i tempi di elaborazione da 9,5 ore a 7,5 ore è sicuramente sufficiente per sostenere la gestione di raster al di fuori dei database geografici nel formato GRID.