Ein Python-Skript wurde vor ungefähr 18 Monaten von einer Person geschrieben, die jetzt gegangen ist. Es wurden dann die erforderlichen Ausgaben erzeugt. Ich wurde gebeten, es erneut auszuführen, jedoch mit anderen (feineren) Dateneingaben. Der Eingabedatensatz wurde in 20 Teilmengen von jeweils ca. 2.700 Datenpunkten aufgeteilt. Das Skript stürzt jedoch ab ("python.exe funktioniert nicht mehr"), nachdem ca. 300 Datenpunkte verarbeitet wurden (Bereich 295 bis 306 und schlägt NICHT immer im selben Datensatz fehl).
Wie sein altes (ish) wurde das Skript mit arcgisscripting und nicht mit arcpy geschrieben. Im Allgemeinen wird Folgendes mit Cursorn ausgeführt:
- Berechnen Sie für einen bestimmten Punkt die Kostenentfernung (mit gp.CostDistance_sa) mit einem Grenzwert von 60 Minuten Fahrzeit.
- Ruft gp.ExtractValuesToPoints_sa auf, um alle Einzelwerte an jedem Datenpunkt zu extrahieren, und gibt eine Feature-Class an eine Datei-Geodatabase aus.
- Liest die in b) oben erstellte Feature-Class und schreibt die Werte in eine CSV-Datei (ohne Punkte mit "Keine Daten" (Wert -9999)).
Wiederholt 1, 2 und 3 für alle verbleibenden Datenpunkte in der Eingabedatei.
Die Bearbeitungszeit beträgt ca. Durchschnittlich 1 Minute pro Datenpunkt. Hier sind einige relevante technische Spezifikationen:
- Der PC verfügt über eine Quad-Core-Intel i7-2720QM-CPU mit 2,20 GHz und 8 GB RAM unter Windows 7 (64 Bit).
- Die Python-Version ist 2.6.6 (die Shell gibt auch "[MSC v, 1500 32 Bit (Intel)] unter win32" an).
- ArcMap 10.0 (SP4) ist ebenfalls installiert.
Ich habe versucht, es auf einem anderen PC auszuführen (bisher ohne Absturz). Derzeit wird der Job auf einem älteren PC erfolgreich (aber langsamer) ausgeführt und hat 419 Datensätze ohne Absturz erreicht. Die relevanten Spezifikationen für diese Maschine sind:
- Intel Core 2 DUO E7500 Prozessor mit 2,93 GHz, 4 GB RAM und 64 Bit Windows 7.
- Python Version 2.5.1 (Shell gibt auch "[MSC v, 1310 32 Bit (Intel)] unter win32" an).
- ArcMap 9.3 ist installiert (keine Erwähnung von Service Packs).
Kann jemand einen Rat geben, warum das Skript eine Weile zu funktionieren scheint und dann abstürzt und wie man es löst?
Die Tatsache, dass (bisher) ein anderer PC für die Verarbeitung des Skripts angezeigt wird, deutet auf etwas "Umweltfreundliches" hin.
Als Update verarbeitet der PC mit ARCGIS 9.3 die Daten weiterhin erfolgreich und hat 1.300 verarbeitete Datenpunkte erreicht (und zählt noch). Ein Kollege hat die Daten auch auf seinem PC mit ARCGIS 10.1 ausgeführt - sie stürzten nach 267 Datensätzen zweimal ab. Obwohl dies nicht schlüssig ist, scheint der rote Faden zu sein, dass Arc 9.3 die Daten verarbeitet, Arc 10.x jedoch nicht.
Antworten:
Wenn Sie den Task-Manager ausführen und beobachten, wie die Speicherkapazität der ausführbaren Python-Datei zunimmt und mehr als 1 GB überschreitet, bevor sie stirbt, können Sie von einem Upgrade auf 10.1 64-Bit-Geoverarbeitung profitieren.
Wenn Sie Cursor verwenden, können Sie für die Leistung von den neuen arcpy.da-Cursorn profitieren. http://resources.arcgis.com/de/help/main/10.1/index.html#//018w00000008000000
Ich habe ein Projekt auf arcpy.da aktualisiert und es war eine Verbesserung um 2 Größenordnungen.
quelle
Dies ist einfach ein Arcpy-Bug. Sie können versuchen, die Schritte zu vermeiden, die den Absturz verursachen. Dies geschieht jedoch im Allgemeinen unter verschiedenen Tools, wenn eine lange Liste von Daten verarbeitet wird. Die einzige Problemumgehung, die ich gefunden habe, besteht darin, dass mein Skript seinen Fortschritt auf dem Weg zur Festplatte speichert. Wenn Sie den Prozess neu starten, weiß es, wo es abholen soll. Wenn Sie dann die Windows-Debugger-Nachricht durch Ändern der Registrierung deaktivieren (siehe unten), können Sie das Skript in cmd.exe einfach wiederholt ausführen, bis der gesamte Stapel abgeschlossen ist, ohne den Prozess jedes Mal zwischendurch manuell schließen zu müssen.
Ich weiß, dass dies eine schreckliche Problemumgehung ist, aber es ist ziemlich ungewöhnlich, dass eine Python-Bibliothek den Python-Interpreter abschaltet.
quelle
Haben Sie überprüft, wie das Skript mit Cursorn umgeht? Meine Anwendungen hängen oft, wenn ich vergesse, sie explizit zu schließen
del row, cursor
, manchmal erst nach einiger Zeit.Wenn das nicht hilft, würde ich vorschlagen, einen kleineren Teil des Codes und / oder der Daten zu verwenden.
quelle