Una persona que ahora se ha ido escribió un guión de Python hace aproximadamente 18 meses. Produjo las salidas requeridas entonces. Me han pedido que lo vuelva a ejecutar pero con entradas de datos diferentes (resolución más fina). El conjunto de datos de entrada se ha dividido en 20 subconjuntos de aproximadamente 2.700 puntos de datos cada uno. Sin embargo, el script se bloquea ("python.exe ha dejado de funcionar") después de que se hayan procesado aproximadamente 300 puntos de datos (rango 295 a 306 y NO siempre falla en el mismo registro).
Como es antiguo (ish), el guión se escribió usando arcgisscripting y no arcpy. En general, hace lo siguiente con los cursores:
- Para un punto dado, calcule la distancia de costo (usando gp.CostDistance_sa) con un límite de tiempo de viaje de 60 minutos.
- Llama a gp.ExtractValuesToPoints_sa para extraer todos los valores individuales en cada punto de datos y genera una clase de entidad en una geodatabase de archivos.
- Lee la clase de entidad creada en b) anterior y escribe los valores en un archivo CSV (omitiendo cualquier punto con "Sin datos" (valor -9999)).
Repite 1, 2 y 3 para todos los puntos de datos restantes en el archivo de entrada.
El tiempo de procesamiento es de aprox. 1 minuto por punto de datos en promedio. Aquí hay algunas especificaciones técnicas relevantes:
- La PC tiene una CPU Intel i7-2720QM de cuatro núcleos que funciona a 2,20 GHz con 8 GB de RAM con Windows 7 (64 bits).
- La versión de Python es 2.6.6 (el shell también indica "[MSC v, 1500 32 bit (Intel)] en win32).
- ArcMap 10.0 (SP4) también está instalado.
He intentado ejecutarlo en una PC diferente (hasta ahora sin fallar). Actualmente, el trabajo se ejecuta con éxito (pero más lentamente) en una PC más antigua y ha alcanzado 419 registros sin fallar. Las especificaciones relevantes para esta máquina son:
- Procesador Intel Core 2 DUO E7500 que funciona a 2,93 GHz con 4 GB de RAM y 64 bits de Windows 7.
- Python versión 2.5.1 (el shell también indica "[MSC v, 1310 32 bit (Intel)] en win32).
- ArcMap 9.3 está instalado (sin mencionar ningún Service Packs).
¿Alguien puede ofrecer algún consejo sobre por qué el script parece funcionar durante un tiempo y luego se bloquea y cómo resolverlo?
El hecho de que aparezca una PC diferente (hasta ahora) para manejar el script sugiere algo "ambiental".
Como actualización, la PC que ejecuta ARCGIS 9.3 sigue procesando los datos con éxito y ha alcanzado los 1.300 puntos de datos procesados (y sigue contando). Un colega también ejecutó los datos en su PC con ARCGIS 10.1; se bloqueó después de 267 registros en dos ocasiones distintas. Aunque no es concluyente, el hilo común parece ser que Arc 9.3 procesará los datos pero Arc 10.x no lo hará.
fuente
Respuestas:
Si ejecuta el administrador de tareas y observa que el ejecutable de Python aumenta la memoria y supera 1 gb antes de que muera, entonces puede beneficiarse de la actualización a 10.1 geoprocesamiento de 64 bits.
Para el rendimiento, si está utilizando cursores, podría beneficiarse de los nuevos cursores arcpy.da. http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000008000000
Actualicé un proyecto para usar arcpy.da y fue una mejora de magnitud 2.
fuente
Esto es simplemente un error arcpy. Puede intentar evitar los pasos que están causando el bloqueo, pero generalmente sucede bajo diferentes herramientas cuando se utiliza para procesar una larga lista de datos. La única solución que he encontrado es hacer que mi script guarde su progreso en el disco para que, si reinicia el proceso, sepa de dónde recoger. Si luego deshabilita el mensaje del depurador de Windows alterando el registro (ver más abajo), puede ejecutar repetidamente el script en cmd.exe hasta que complete todo el lote sin tener que cerrar el proceso manualmente cada vez.
Sé que esta es una solución horrible, pero es bastante raro que una biblioteca de Python mate al intérprete de Python.
fuente
¿Has comprobado cómo el script maneja los cursores? Mis aplicaciones a menudo se bloquean cuando olvido cerrarlas usando explícito
del row, cursor
, a veces solo después de un tiempo.Si eso no ayuda, sugeriría usar una porción más pequeña de código y / o datos.
fuente