python.exeが動作を停止しました


9

Pythonスクリプトは、約18か月前に、現在立ち去った人によって書かれました。その後、必要な出力が生成されました。もう一度実行するように求められましたが、データ入力が異なります(解像度が高い)。入力データセットは、それぞれ約2,700データポイントの20サブセットに分割されています。ただし、約300のデータポイントが処理された後、スクリプトはクラッシュします(「python.exeが動作を停止しました」)(範囲295〜306で、常に同じレコードで失敗するわけではありません)。

古くて古いので、スクリプトはarcpyではなくarcgisscriptingを使用して作成されました。広くは、カーソルを使用して次のことを行います。

  1. 特定のポイントについて、移動距離60分のカットオフでコスト距離を(gp.CostDistance_saを使用して)計算します。
  2. gp.ExtractValuesToPoints_saを呼び出して、各データポイントで個々の値をすべて抽出し、フィーチャクラスをファイルジオデータベースに出力します。
  3. 上記のb)で作成したフィーチャクラスを読み取り、値をCSVファイルに書き込みます(「データなし」(値-9999)のポイントは省略します)。

入力ファイル内の残りのすべてのデータポイントに対して1、2、3を繰り返します。

処理時間は約です。データポイントあたり平均1分。関連する技術仕様は次のとおりです。

  • PCには、2.20GHzで動作するクアッドコアIntel i7-2720QM CPU、Windows 7(64ビット)を実行する8GB RAMがあります。
  • Pythonのバージョンは2.6.6です(シェルは「[MSC v、1500 32ビット(Intel)] on win32」とも表示します)。
  • ArcMap 10.0(SP4)もインストールされています。

別のPCで実行してみました(これまでのところクラッシュしていません)。現在、ジョブは古いPCで正常に実行されていますが(遅い)、クラッシュすることなく419レコードに達しています。このマシンに関連する仕様は次のとおりです。

  • Intel Core 2 DUO E7500プロセッサー(2.93 GHz、4 GB RAM、64ビットWindows 7)
  • Pythonバージョン2.5.1(シェルにも「[MSC v、1310 32ビット(Intel)] on win32」と表示されます)。
  • ArcMap 9.3がインストールされている(サービスパックについての言及なし)。

スクリプトがしばらく動作してからクラッシュする理由と解決方法について誰かがアドバイスを提供できますか?

(これまでのところ)スクリプトを処理する別のPCが表示されているという事実は、何か「環境」を示唆しています。


更新として、ARCGIS 9.3を実行しているPCはまだデータを正常に処理しており、1,300データポイントに達しています(そしてカウントしています)。同僚はまた、ARCGIS 10.1を実行しているPCでデータを実行しました-2つの別々の状況で267レコードの後に​​クラッシュしました。決定的ではありませんが、一般的なスレッドは、Arc 9.3はデータを処理しますが、Arc 10.xは処理しないことです。


1
ArcGIS 10.0はarcpyモジュールを使用するようになりました(ArcGIS 9.xはarcgisscriptingモジュールを使用します)。AGS 10環境で機能させる場合は、arcpyを呼び出すようにコードを再構成し、ジオプロセシングツールの名前を調整する必要があります。
dchaboya 2013年

5
いいえ、それは正しくありません。9.3で機能していた古いスクリプトは、10と10.1でも引き続き機能します。あなたはしていない arcpyにGPを変更する必要があります。新しい機能を追加したいが完全に変換したくない場合は、スクリプト全体でgpとarcpyを混在させることもできます。.....なぜこの特定のケースが上でクラッシュするのか、私にはわかりません。私の提案は、それをセクションに
分割し、

KHibma、ええ、AGS 10から実行したときに部分的に機能していたので、それは理にかなっていると
思い

データポイントは変更されましたか?道路網(所要時間)の近くにある施設を利用していると思います。データポイントを処理するアルゴリズムが、プロセスが実行されるたびにまったく同じようにポイントを管理するという保証はありません。300か306か、なんでもいいかもしれません。私は、Pythonスクリプトの道路と場所に基づくネットワークのコスト分析にNAを使用しましたが、小さいサブセットを試したのかどうか疑問に思っています。私は自分のワークステーションで60分の移動のために自分のワークステーションではるかに小さいポイントのグループを実行します。移動時間分析は、処理能力を破壊します。
JLP Wisc。

1
残念ながら、arcpy GPの安定性の問題にも直面しています(これは実際には単なるCOMラッパーであり、バグのあるラッパーのように見えます)。arcpyは私が知っている唯一のサイトパッケージであり、実際にpythonインタープリターをクラッシュさせる可能性があります。CLJは回答の中でいくつかの回避策を提案しましたが(64ビットGP、私たちのGAカーソルなどを使用)、これらの問題はバグであるとESRIからすでに回答を得ています。うまくいけば、次のサービスパックは、この上の改善をもたらします
ユルゲンZornig

回答:


1

タスクマネージャーを実行して、メモリ内のpython実行可能ファイルの増加を監視し、1 GBを超える前にメモリが停止する場合は、10.1 64ビットジオプロセシングにアップグレードするとメリットがあります。

パフォーマンスのために、カーソルを使用している場合は、新しいarcpy.daカーソルを利用すると便利です。 http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000008000000

プロジェクトをarcpy.daを使用するようにアップグレードしたところ、2桁の改善がありました。


1

これは、単純なバグです。クラッシュの原因となる手順を使用しないようにすることもできますが、長いリストのデータを処理するために使用すると、通常はさまざまなツールで発生します。私が見つけた唯一の回避策は、スクリプトが進行状況をディスクに保存するようにすることです。そのため、プロセスを再起動すると、どこからピックアップするかがわかります。その後、レジストリを変更してWindowsデバッガーメッセージを無効にすると(以下を参照)、cmd.exeのスクリプトを繰り返し実行するだけで、バッチ全体が完了するまで、間にプロセスを手動で閉じる必要がなくなります。

私はこれがひどい回避策であることを知っていますが、Pythonライブラリに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

スクリプトがカーソルを処理する方法を確認しましたか?明示的なを使用してアプリケーションを閉じるのを忘れると、アプリケーションがハングすることがよくありますdel row, cursor

それでも問題が解決しない場合は、コードやデータの一部を使用することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.