Llevo varios meses codificando con Python y he desarrollado algunos scripts razonablemente complejos para tareas principalmente de geoprocesamiento. Dicho esto, todavía estoy aprendiendo mucho, ya que vengo de un fondo SQL / VBA / VBScript.
Sé que el código compilado normalmente se ejecuta más rápido que el código que debe ser procesado por un intérprete del lenguaje, así que estoy interesado en la posibilidad de compilar un script Python de geoprocesamiento a un archivo .EXE para trabajar con big data.
¿Es esto posible? Si lo es, ¿cuál es la mejor manera de compilar un script Python (.py) que está importando los módulos arcgisscripting o arcpy?
He pasado unos minutos intentando encontrar lo que quiero hacer y la búsqueda me ha devuelto este artículo entre otros: http://www.ehow.com/how_2091641_compile-python-code.html
El compilador parecía funcionar, pero al ejecutar el archivo .EXE resultante, daba un críptico error diciendo que algunos archivos no estaban disponibles.
El script de Python se ejecuta lo que parece ser razonablemente bien desde la línea de comandos, pero me pregunto si podría ver alguna ligera mejora si yo fuera capaz de compilar el archivo .py. Una vez más, estoy trabajando con algunos grandes conjuntos de datos que están tomando + 20 horas para procesar (delineación de las cuencas hidrográficas de los sitios de entrada de muestras de calidad del agua). Tomaré cualquier cosa que pueda conseguir en forma de mejoras.
El script se ejecutó un 10% más rápido fuera de ArcGIS desde la línea de comandos utilizando un conjunto de sitios de prueba frente a configurar el script como una herramienta de script en una nueva caja de herramientas en ArcCatalog. He estado ejecutando el script desde la línea de comandos w/o cualquier instancia de ArcGIS abierto en una máquina dedicada.
Entonces, ¿es posible compilar scripts en Python que importen el módulo arcgisscripting y que llamen a las herramientas de ArcToolBox?
EDITAR
Gracias por la aportación, me resulta muy útil. La secuencia de comandos es en gran medida una manera de coordinar una serie de herramientas de ArcGIS y la salida en los formatos deseados / lugares / con la atribución apropiada. Ya he recortado un poco de grasa creo que al escribir en una carpeta de cero en lugar de una geodatabase personal de cero para algunos archivos raster provisionales para que puedan ser almacenados en el formato ESRI GRID frente al formato IMG. Voy a comprobar las sugerencias perfilador sin embargo.
Hay algunos en mi oficina que cuestionan a Python diciendo "que el código compilado es mucho más rápido que el código que se ejecuta a través de un intérprete" principalmente en comparación con, digamos, un programa compilado de Visual Basic o VB.NET, pero es un buen punto que las herramientas van a tomar tiempo de cualquier manera. Y, parece que con las máquinas de computación de hoy en día que el código interpretado puede no ser mucho más lento que el código compilado para justificar ir esa milla extra.
EDITAR - actualización sobre la optimización del programa con formatos raster.
Quería hacer un seguimiento de mi "optimización" de este programa Python, y yo era capaz de afeitarse 2 horas de tiempo de procesamiento escribiendo rásters provisionales a formato GRID en lugar de a una geodatabase personal. No sólo eso, hubo una reducción SIGNIFICATIVA en el consumo de espacio en disco de tamaño de datos. La ejecución original que hice escribiendo todos los rásters (y eran sólo características de punto convertidas a rásters, y luego rásters de cuencas hidrográficas) resultó en 37,1 GB de datos sólo para esos archivos. Escribiendo las dos últimas salidas de datos a una carpeta en formato GRID se redujo a 667 MB de datos.
Tendría curiosidad por ver cómo un archivo GDB manejaría estos datos, aunque principalmente en la forma del tamaño de los datos. Sin embargo, reducir mi tiempo de procesamiento de 9,5 horas a 7,5 horas es suficiente para abogar por el tratamiento de rásters fuera de las bases de datos geográficos en formato GRID.
0 votos
El blog de ArcGIS Server de esta mañana es muy oportuno. Sterling@esri hace un buen trabajo explicando por qué y cuándo [aquí][1][1]: blogs.esri.com/Dev/blogs/arcgisserver/archive/2011/04/12/