python.exe ha smesso di funzionare


9

Una sceneggiatura di Python è stata scritta circa 18 mesi fa da una persona che ora è andata via. Quindi ha prodotto gli output richiesti. Mi è stato chiesto di eseguirlo di nuovo ma con input di dati diversi (risoluzione più fine). Il set di dati di input è stato suddiviso in 20 sottoinsiemi di circa 2.700 punti dati ciascuno. Tuttavia, lo script si arresta in modo anomalo ("python.exe ha smesso di funzionare") dopo che sono stati elaborati circa 300 punti dati (intervallo da 295 a 306 e NON ha sempre esito negativo sullo stesso record).

Come il suo vecchio (ish), la sceneggiatura è stata scritta usando arcgisscripting e non arcpy. In linea di massima esegue le seguenti operazioni usando i cursori:

  1. Per un dato punto, calcola la distanza di costo (usando gp.CostDistance_sa) con un tempo di percorrenza di 60 minuti.
  2. Chiama gp.ExtractValuesToPoints_sa per estrarre tutti i singoli valori in ciascun punto dati e genera una classe di caratteristiche in un geodatabase di file.
  3. Legge la classe di funzionalità creata in b) sopra e scrive i valori in un file CSV (omettendo qualsiasi punto con "Nessun dato" (valore -9999)).

Ripete 1, 2 e 3 per tutti i punti dati rimanenti nel file di input.

Il tempo di elaborazione è di ca. 1 minuto per punto dati in media. Ecco alcune specifiche tecniche rilevanti:

  • Il PC ha una CPU Intel i7-2720QM quad core a 2,20 GHz con 8 GB di RAM con Windows 7 (64 bit).
  • La versione di Python è 2.6.6 (la shell indica anche "[MSC v, 1500 32 bit (Intel)] su win32).
  • ArcMap 10.0 (SP4) è anche installato.

Ho provato a eseguirlo su un altro PC (finora senza crash). Attualmente il lavoro viene eseguito correttamente (ma più lentamente) su un PC più vecchio e ha raggiunto 419 record senza arresti anomali. Le specifiche pertinenti per questa macchina sono:

  • Processore Intel Core 2 DUO E7500 in esecuzione a 2,93 GHz con 4 GB di RAM e Windows 7 a 64 bit.
  • Python versione 2.5.1 (la shell indica anche "[MSC v, 1310 32 bit (Intel)] su win32).
  • ArcMap 9.3 è installato (nessuna menzione di alcun Service Pack).

Qualcuno può offrire qualche consiglio sul perché la sceneggiatura sembra funzionare per un po 'e poi su come risolverla?

Il fatto che un PC diverso appaia (finora) per gestire la sceneggiatura suggerisce qualcosa di "ambientale".


Come aggiornamento, il PC che esegue ARCGIS 9.3 sta ancora elaborando correttamente i dati e ha raggiunto i 1.300 punti dati elaborati (e ancora contando). Un collega ha anche eseguito i dati sul proprio PC con ARCGIS 10.1, che ha subito un arresto anomalo dopo 267 record in due diverse occasioni. Sebbene non conclusivo, il thread comune sembra essere che Arc 9.3 elaborerà i dati, mentre Arc 10.x no.


1
ArcGIS 10.0 ora utilizza il modulo arcpy (ArcGIS 9.x utilizza il modulo arcgisscripting). Dovrai riconfigurare il tuo codice per chiamare arcpy e modificare i nomi di tutti gli strumenti di geoprocessing, se vuoi che funzioni in ambiente AGS 10.
Dchaboya,

5
No, non è vero - i vecchi script che funzionavano in 9.3 continueranno a funzionare in 10 e 10.1. Non è necessario modificare gp in arcpy. Puoi anche mescolare gp e arcpy in uno script se vuoi aggiungere nuove funzionalità, ma non convertirle completamente. ..... perché questo caso particolare sta andando in crash sopra, non lo so. Il mio suggerimento è di
scomporlo

KHibma, sì, credo che abbia un senso dato che funzionava parzialmente quando scappava da AGS 10.
dchaboya,

I punti dati sono cambiati? Presumo che tu stia utilizzando strutture a breve distanza dalla rete stradale (tempo di viaggio). Non è garantito che l'algoritmo per l'elaborazione dei punti dati gestisca i punti esattamente allo stesso modo ogni volta che si esegue il processo. 300 o 306 o qualsiasi altra cosa potrebbe essere una coincidenza. Ho usato NA per l'analisi dei costi di una rete basata su strade e posizioni in uno script Python e mi chiedo se hai provato un sottoinsieme più piccolo. Avrei eseguito gruppi di punti molto più piccoli sulla mia workstation per un viaggio di 60 minuti sulla mia workstation. L'analisi del tempo di viaggio distruggerà la potenza di elaborazione.
JLP Wisc.

1
Sfortunatamente stiamo anche affrontando problemi di stabilità di arcpy GP (che in realtà è solo un wrapper COM, e dato che sembra un bug). arcpy è l'unico pacchetto del sito che conosco, che può effettivamente causare l'interruzione dell'interprete Python. CLJ ha suggerito alcune soluzioni alternative qui sotto nelle risposte (usa GP a 64 bit, noi cursori GA, ecc ...), ma abbiamo già ricevuto risposta da ESRI che questi problemi sono bug. Spero che il prossimo service pack apporti miglioramenti a questo
Jürgen Zornig,

Risposte:


1

Se si esegue Task Manager e si osserva l'aumento dell'eseguibile di Python in memoria e si supera 1 GB prima che muoia, è possibile che si tragga vantaggio dall'aggiornamento a geoprocessing a 10.1 64 bit.

Per prestazioni, se si utilizzano i cursori, è possibile beneficiare dei nuovi cursori arcpy.da. http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000008000000

Ho aggiornato un progetto per usare arcpy.da ed è stato un miglioramento di 2 magnitudini.


1

Questo è semplicemente un bug arcpico. Puoi provare a evitare di utilizzare i passaggi che causano l'arresto anomalo, ma generalmente si verificano con strumenti diversi quando vengono utilizzati per elaborare un lungo elenco di dati. L'unica soluzione che ho trovato è di fare in modo che il mio script salvi i suoi progressi lungo il percorso su disco, quindi se riavvii il processo, sa da dove prelevare. Se quindi disabiliti il ​​messaggio di debugger di Windows modificando il registro (vedi sotto), puoi semplicemente eseguire ripetutamente lo script in cmd.exe fino a quando non completa l'intero batch senza dover chiudere manualmente il processo ogni volta nel mezzo.

So che questa è una soluzione terribile, ma è abbastanza raro che una libreria Python uccida l'interprete 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"

0

Hai controllato come lo script gestisce i cursori? Le mie applicazioni si bloccano spesso quando dimentico di chiuderle utilizzando esplicito del row, cursor, a volte solo dopo un po 'di tempo.

Se ciò non aiuta, suggerirei di utilizzare una porzione più piccola di codice e / o dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.