python.exe ha dejado de funcionar

9

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:

  1. Para un punto dado, calcule la distancia de costo (usando gp.CostDistance_sa) con un límite de tiempo de viaje de 60 minutos.
  2. 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.
  3. 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á.

usuario14134
fuente
1
ArcGIS 10.0 ahora usa el módulo arcpy (ArcGIS 9.x usa el módulo arcgisscripting). Tendrá que volver a configurar su código para llamar a arcpy, así como ajustar los nombres de cualquier herramienta de geoprocesamiento, si desea que funcione en el entorno AGS 10.
dchaboya
55
No, eso no es correcto: los scripts antiguos que funcionaban en 9.3 continuarán funcionando en 10 y 10.1. Usted no necesita modificar gp a ArcPy. Incluso puede mezclar gp y arcpy a lo largo de un script si desea agregar una nueva funcionalidad, pero no convertir completamente. ..... por qué este caso en particular está fallando arriba, no lo sé. Mi sugerencia es
dividirlo
KHibma, sí, supongo que tiene sentido ya que funcionaba parcialmente cuando se ejecutaba desde AGS 10.
dchaboya
¿Han cambiado los puntos de datos? Supongo que está utilizando instalaciones a poca distancia de la red de carreteras (tiempo de viaje). No hay garantía de que el algoritmo para procesar puntos de datos gestione los puntos exactamente igual cada vez que se ejecuta el proceso. 300 o 306 o lo que sea podría ser una coincidencia. Utilicé NA para el análisis de costos de una red basada en carreteras y ubicaciones en un script de Python y me pregunto si ha probado un subconjunto más pequeño. Corría grupos de puntos mucho más pequeños en mi estación de trabajo para un viaje de 60 minutos en mi estación de trabajo. El análisis del tiempo de viaje destruirá el poder de procesamiento.
JLP Wisc.
1
Desafortunadamente, también nos enfrentamos a problemas de estabilidad de arcpy GP (que de hecho es solo un contenedor COM, y parece que tiene errores). arcpy es el único paquete de sitio que conozco, que en realidad puede bloquear el intérprete de Python. CLJ sugirió algunas soluciones alternativas aquí abajo en las respuestas (use GP de 64 bits, cursores GA de EE. UU., Etc.), pero ya recibimos respuesta de ESRI de que estos problemas son errores. Esperemos que el próximo paquete de servicio traiga mejoras en esto
Jürgen Zornig

Respuestas:

1

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.

CLJ
fuente
1

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.

DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\DontShowUI = "1"
DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\Disabled = "1"
Lucas Fortini
fuente
0

¿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.

Jan Šimbera
fuente