Ejecutar herramientas personalizadas (de modelo o secuencia de comandos) en segundo plano

La ejecución de una herramienta en segundo plano le permite continuar interactuando con la aplicación (como ArcMap) y realizar otras tareas mientras se ejecuta la herramienta.

Por defecto, las herramientas de modelo o secuencia de comandos se ejecutan en primer plano. Si desea que su herramienta se ejecute en segundo plano, es necesario resolver los problemas que se detallan a continuación. Después de haberse asegurado de que sus modelos y secuencias de comandos hayan solucionado estos problemas, podrá ejecutar su herramienta en segundo plano con los pasos siguientes:

  1. En la ventana de ArcToolbox o de Catálogo, haga clic con el botón derecho del ratón y seleccione Propiedades. En la pestaña General, desactive Ejecutar siempre en primer plano y haga clic en Aceptar.
  2. En el menú de ArcMap, haga clic en Geoprocesamiento > Opciones de geoprocesamiento. En el panel Procesamiento en segundo plano, active Habilitar.

Los problemas que tiene que resolver son

  1. Usar capas de documento de mapa: este problema afecta a las herramientas tanto de modelo como de secuencia de comandos.
  2. Usar el documento del mapa actual en las herramientas de secuencia de comandos: esto afecta solo a las herramientas de secuencia de comandos.

Problema 1: usar capas de documento de mapa

Ejemplo de modelo

Cuando se ejecuta una herramienta de modelo en segundo plano, solo las capas que participan como parámetros de modelo están disponibles para el proceso en segundo plano. Por ejemplo, el siguiente modelo permite al usuario introducir un área de interés, una curva de nivel base y un intervalo de curvas de nivel para crear una clase de entidad de curva de nivel. Este modelo tiene cuatro parámetros (3 de entrada y 1 de salida). Observe que la variable Ráster de elevación es una capa de la tabla de contenido de ArcMap, pero no está configurada como parámetro de modelo. Cuando este modelo se ejecuta mediante su cuadro de diálogo de herramienta, el usuario introduce la capa de ubicación potencial de vertedero para el parámetro Área de interés, pero no tiene que proporcionar la capa de ráster de elevación, ya que no es un parámetro.

Usar capas en un modelo

El modelo anterior se ejecutará en primer plano como se espera. No obstante, si se configura este modelo para que se ejecute en segundo plano, no lo conseguirá y mostrará una advertencia como "Ninguno de los procesos está listo para ejecutarse", como muestra la siguiente ilustración. El motivo de este fallo es que los procesos que se ejecutan en segundo plano no pueden usar capas que no sean parámetros de herramienta. En este caso, la variable de modelo Ráster de elevación no es un parámetro, por lo que el proceso en segundo plano no la puede encontrar y falla, mostrando la advertencia.

Mensaje de advertencia para un modelo que usa una capa en segundo plano

Soluciones

Hay varias formas de cambiar el modelo para que se ejecute en segundo plano.

  • Hacer de la variable de capa un parámetro de modelo. De esta forma se pasa la capa al proceso en segundo plano y la herramienta se ejecuta en segundo plano. Esta es la solución más sencilla.
  • En lugar de utilizar una capa, utilice un dataset del disco. En el ejemplo anterior, se hace doble clic en la herramienta Extraer por máscara y se cambia el parámetro Ráster de entrada (representado por la variable Ráster de elevación) para usar un dataset de ráster en lugar de una capa de la tabla de contenido. El único problema de esta solución es que las capas pueden tener selecciones, mientras que los datasets del disco no. Si utiliza una variable de capa porque necesita utilizar selecciones de capa, no puede usar un dataset del disco. En este caso tiene dos alternativas (aparte de hacer de la variable un parámetro de modelo)
    • En el modelo, agregue la herramienta Crear capa de entidades para crear una variable de capa a partir de una variable del dataset y utilizarla como entrada para el siguiente proceso del modelo. (La herramienta Crear capa de entidades le permite introducir una expresión de la selección).
    • Cree un archivo de capa (.lyr) y utilice dicho archivo .lyr en el modelo. Esto es, en el modelo anterior, la variable Ráster de elevación debería apuntar al archivo .lyr. Puede crear un archivo .lyr con la herramienta Guardar en archivo de capa.
NotaNota:

Además de configurar los parámetros de modelo para las capas de entrada, el resto de capas creadas o actualizadas por el modelo deben configurarse como un parámetro de modelo.

Ejemplo de herramienta de secuencia de comandos

Las herramientas de secuencia de comandos tienen el mismo problema que las herramientas de modelo cuando se usan capas como entradas. Cada capa se debe pasar como parámetro y además debe ser del tipo de datos de geoprocesamiento adecuado. Las herramientas de secuencia de comandos ofrecen flexibilidad y versatilidad; por ejemplo, pueden actuar frente a las capas usando un tipo de datos de cadena de texto que coincida con un nombre de capa de la tabla de contenido. Aunque este método funcione en primer plano, no funcionará en segundo plano porque no hay conexión de la referencia de la capa de mapa con el proceso en segundo plano. La siguiente ilustración muestra una capa de parámetro que se pasa como cadena y las propiedades de la secuencia de comandos modificadas para usar una capa como entrada. Modificar el tipo de datos de un parámetro de una herramienta de secuencia de comandos

Soluciones

Asegúrese de que los parámetros de la herramienta de secuencia de comandos utilicen los tipos de datos adecuados, como Capa de entidades, Capa ráster y Vista de tabla.

Si su herramienta de secuencia de comandos utiliza una capa que no es un parámetro, necesitará

  • Hacer de la capa un parámetro.
  • En lugar de utilizar una capa, use el dataset del disco en un archivo .lyr del disco.

Problema 2: Usar el documento del mapa actual en las herramientas de secuencia de comandos

Las herramientas de secuencia de comandos que funcionan respecto al documento de mapa actual deben ejecutarse en primer plano. La clase MapDocument es un método eficaz para sacar partido a su documento de mapa actual mediante las herramientas de secuencia de comandos. Por ejemplo, puede tener una secuencia de comandos que haga zoom automáticamente en las entidades que acaba de seleccionar. La ejecución de la siguiente secuencia de comandos producirá el error "Objeto: CreateObject no puede abrir el documento de mapa".

Secuencia de comandos de ejemplo que selecciona entidades y aplica el zoom a las mismas usando la representación cartográfica ArcPy

import arcpy

idvalue = arcpy.GetParameterAsText(0)

mxd = arcpy.mapping.MapDocument("CURRENT")

arcpy.SelectLayerByAttribute_management(
    "Parcels", "NEW_SELECTION", '"ID" = ' + idvalue)
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.zoomToSelectedFeatures()
Obtener más información acerca del trabajo con CURRENT en la clase MapDocument.

Solución

Las herramientas de secuencia de comandos que utilizan el documento de mapa actual deben ejecutarse siempre en primer plano. En la ventana Catálogo, haga clic con el botón derecho del ratón en su herramienta de secuencia de comandos y haga clic en Propiedades. En la pestaña General, seleccione Ejecutar siempre en primer plano.

Herramientas que ejecutan herramientas

Suponga que tiene una herramienta de secuencia de comandos que utiliza el documento de mapa actual, como se describía anteriormente, y que esta herramienta debe ejecutarse siempre en primer plano. ¿Qué ocurre su utiliza esta herramienta de secuencia de comandos en una herramienta de modelo, y ésta se ejecuta en segundo plano? La respuesta es que los modelos conocen las herramientas de dentro del modelo que deben ejecutarse en primer plano. Si alguna herramienta debe ejecutarse en primer plano, el modelo se ejecutará automáticamente en primer plano.

NotaNota:

Si desea ejecutar un modelo en segundo plano pero no puede porque la opción Ejecutar siempre en primer plano está marcada y deshabilitada, examine las propiedades del modelo o de las herramientas de secuencia de comandos que utiliza y asegúrese de que Ejecutar siempre en primer plano no esté marcado.

5/9/2014