Tengo un script que obtiene un valor del campo de un shapefile para devolverlo al usuario.
Parece que solo cuando arcpy.SearchCursor se llama ArcMap 10.0 bloquea el archivo y no se elimina una vez que el script termina de ejecutarse. Para desactivar el bloqueo, tengo que cerrar ArcMap. En el script, elimino el objeto SearchCursor después de usarlo, así como el objeto de fila.
La forma en que tengo el script funcionando es que intenta eliminar la carpeta del espacio de trabajo en ejecuciones posteriores pero no puede debido al bloqueo ... hasta que, por supuesto, cierro ArcMap.
¿Hay algún consejo para que esta cerradura desaparezca?
fuente
row = None
después del ciclo simplemente limpia la última asignación de fila. Moverlo dentro del bucle es una duplicación de esfuerzo. En cualquier caso, el recolector de basura debe desasignar la memoria a menos que arcpy o ArcMap mantengan inercialmente una referencia a los objetos de la fila.¿Necesita ejecutar su script ArcPy desde ArcMap? A menos que sea parte de una interfaz o caja de herramientas que haya creado, puede ejecutarla fuera de ArcMap desde una consola Python, IDLE o Eclipse, etc. (siempre que tenga una licencia apropiada en la máquina en la que se está ejecutando). Si este es el caso, puede escribir un pequeño código de Python para generar su script ArcPy como un subproceso y el bloqueo debe liberarse cuando se cierre el subproceso.
Las cerraduras ArcGIS son un dolor. He tenido situaciones en las que persiste un bloqueo incluso después de apagar la máquina, lo cual es un dolor monumental (generalmente si Arc se ha bloqueado antes de que pueda arreglar los bloqueos). Como último recurso, si esto sucede, use el Explorador de Windows para buscar el archivo .LOCK y eliminarlo manualmente. Esto no funcionará si ArcMap o un proceso de Python acceden a él, por lo que es relativamente seguro ... pero esta es realmente una tarjeta para salir de la cárcel y no es una buena práctica :)
fuente
Si está eliminando correctamente los objetos de fila y cursor (p
del row, rows
. Ej. ) Y el bloqueo permanece, es probable que ArcMap en sí, no arcpy, todavía lo esté haciendo referencia.¿El archivo de forma hace referencia a una capa en la tabla de contenido, o su herramienta de script lo agrega al TOC?
Si es esto último, puede intentar desactivar "Agregar resultados de operaciones de geoprocesamiento a la pantalla" en Geoprocesamiento-> Opciones de geoprocesamiento en ArcMap.
Una sugerencia adicional: si está haciendo esto como un conjunto de datos temporal / intermedio, y el número de características no es demasiado grande, intente usar el
in_memory
espacio de trabajo en lugar de un archivo de forma para solucionar el problema de bloqueo por completo y obtener un buen aumento potencial de rendimiento también .Solo asegúrese de eliminar el espacio de trabajo in_memory o los conjuntos de datos específicos que cree allí usando Eliminar (Administración de datos) antes de salir del script, de lo contrario, continuará residiendo en la memoria hasta que se cierre la aplicación.
Por último, también señalaría que el comportamiento de bloqueo del archivo de forma cambió en 10.0 para volverse más estricto al no eliminar los archivos de bloqueo cuando elimina una capa de la tabla de contenido. Vea también este artículo y esta pregunta relacionada .
fuente