7 votos

¿Cómo puedo acelerar la velocidad de mi arcpy script?

He escrito una aplicación que hace un montón de geoprocesamiento utilizando arcpy. Una vez iniciado, la propia aplicación se ejecuta a una velocidad aceptable, pero es muy lento para arrancar. Puede tardar 30 segundos o más para iniciar la interfaz gráfica de usuario, así que me gustaría encontrar maneras de hacer que se inicie más rápido.

Como lo que yo puedo decir, la fuente principal de la demora es cuando me puse el dataframe de la siguiente manera:

self.df = arcpy.mapping.ListDataFrames(self.mxd, "")[0]

¿Alguien tiene alguna sugerencias / trucos para hacer que el conjunto de la aplicación o la ListDataFrames correr más rápido cuando se inicia la aplicación?

Yo uso de ArcGIS 10.1, python 2.7 y tkinter para la interfaz gráfica de usuario. Siéntase libre de preguntar si me he olvidado de mencionar cualquier cosa.

EDITAR:

Conforme a lo solicitado, aquí está el (muy!) versión simplificada del inicio de mi código:

import arcpy
import sys
from Tkinter import *
import ttk
import tkMessageBox
import tkFileDialog
import webbrowser
import time
import csv
import os
import textwrap

arcpy.env.workspace = r".\..\Append\temp.gdb"

Title = "Automated Map Generator"

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master, background = "white")
        self.grid()

        self.createWidgets(master)

    def createWidgets(self, master):

        # setup map document
        self.mxd = arcpy.mapping.MapDocument(r".\autolim_mapping.mxd")
        arcpy.env.overwriteOutput = True
        self.df = arcpy.mapping.ListDataFrames(self.mxd, "")[0]

#[Lots of missing code here]

root = Tk()
root.tkraise()
app = Application(master=root)
app.master.title(Title)
app.mainloop()

¿Cómo puedo saber cuál es el ListDataFrames que lleva tanto tiempo? Puse un montón de instrucciones de impresión mediante el código de inicio y observó cómo el tiempo que se tomo para salir... apuesto a que hay mejores maneras de hacer esto, pero yo soy bastante nuevo en python.

EDIT 2: @dassouki - gracias! Aquí está la salida de los tiempos de después de 'importar el tiempo":

Start Class Application (Frame):  1.53200006485
Start def Create Widgets:         1.59400010109
Start  mapping.MapDocument:       1.6099998951
Start env.overwrite:              1.64100003242
Start mapping.ListDataFrames:     1.64100003242
Finish mapping.ListDataFrames:    12.2660000324

4voto

NoobDeveloper Puntos 101

Según tus comentarios, te recomiendo que te meta su optimización en el MXD que está intentando cargar.

MXD puede llegar a la hinchada a lo largo del tiempo de almacenamiento de geoprocesamiento y otra información. Generalmente esto no es muy notable, pero si usted está utilizando el mismo MXD en la producción podría provocar que el más lento.

Mientras que su MXD, no parece que los grandes, usted todavía puede tener algo de suerte la optimización de cómo se está utilizando el MXD, como por la modificación de la secuencia de comandos para crear un espacio en blanco MXD de una plantilla, la eliminación de las capas innecesarias en su MXD, o guardarlo localmente.

Os recomiendo echar un vistazo a algunas de estas preguntas con respecto a MXD de los tamaños de archivo y optimización:

¿Qué hace que un MXD tamaño de archivo más grande y cómo reducir su tamaño?

Python aumentar el tamaño de mi .mxd

Problema: MXD tamaño del archivo aumenta significativamente con la posterior guarda

1voto

ZeroSignal Puntos 1391

Creo que el retraso es causado por la espera para el servidor de licencias. Si se puede, cambiar a una independiente de la licencia y comparar la diferencia. Me he dado cuenta de que a veces, el proceso de pago puede tardar algún tiempo.

Ya sabemos que ese no es el problema, pruebe la instalación de 64 bits de geoprocesamiento: http://blogs.esri.com/esri/arcgis/2012/11/12/python-scripting-with-64-bit-processing/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X