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