ArcGISツールとスタンドアロンのPythonスクリプトのパフォーマンス


11

ArcToolboxでPythonスクリプトを実行することとスタンドアロンスクリプトとして実行することの違いを研究した人はいますか?バンド1を抽出して、RGBイメージのセットをシングルバンドに変換するための簡単なスクリプトを作成する必要がありました。スタンドアロンのスクリプトとしてPCに対して読み取りと書き込みを行うと、約350秒で1000の同じサイズのイメージを処理します。ArcToolboxから同じスクリプトを実行するには、約1250秒かかります。

import arcpy
import csv
from os import path

arcpy.env.workspace = in_folder
image_list = arcpy.ListRasters()

#Create a CSV file for timing output
    with open(outfile, 'wb') as c:
        cw = csv.writer(c)
        cw.writerow(['tile_name', 'finish_time'])

        #Start the timer at 0
        start_time = time.clock()

        for image in image_list:
            #Extract band 1 to create a new single-band raster
            arcpy.CopyRaster_management(path.join(image, 'Band_1'), path.join(out_folder, image))
            cw.writerow([image, time.clock()])

各タイルが処理を完了するタイミングを追跡するコードを追加し、結果をCSVとしてエクスポートしました。Excelでは、終了時間を処理時間に変換します。結果をグラフにすると、処理時間は各タイルのスクリプトとほぼ同じですが、ArcGISツールとして実行すると、処理時間は直線的に増加します。

ここに画像の説明を入力してください

データの読み取りと書き込みがネットワークデバイスに対するものである場合、その増加は指数関数的です。

この特定のタスクを達成する別の方法を探しているのではありません。このスクリプトのパフォーマンスが、スタンドアロンスクリプトとしてではなく、ArcGISツールとして実行すると時間とともに低下する理由を理解したいと思います。他のスクリプトでもこの動作に気づきました。


1
ArcGIS外のpythonははるかに高速です。非常に単純なスクリプトを実行するとき、またはアイテムをターミナルにドラッグアンドドロップするときにpythonウィンドウを使用するだけです。ソフトウェアパッケージ全体もpythonで動作する必要があるため、ArcGISターミナルがインタープリターのリソース割り当てを制御していると思います。
atxgis

私の推奨事項(提供したような定量化されたパフォーマンスデータではなく、私の経験に基づく)は、最後の手段としてのみarcpyを使用することです。上記の例では、arcpyを使用しないpythonインタープリターは、ラスターのディレクトリを効率的にフィルタリングし、それらを新しいフォルダーにコピーできます
Paul H

1
x64バックグラウンドジオプロセシングとインプロセス32ビットの違いはどれくらいですか?
カークカイケンダル

「ArcToolboxでPythonスクリプトを実行している」とは、Pythonスクリプトツールを実行しているということですか?その場合、テスト用のパラメーターなしで実行していますか?
PolyGeo

@PolyGeoはい、ArcGISツールボックスでスクリプトツールを作成しました。これは1つのパラメーターを取り、そこからin_folderおよびout_folderが派生します。これはすべて、タイミング測定が始まる前に行われます。
ビョルン

回答:


1

これは私の考えです。ArcToolboxからスクリプトを実行すると、ツールがメインアプリケーション(ArcMap)を操作または更新しようとするため、あらゆる種類の隠れたコストが発生します。すべてのツールはメタデータを更新し、一部はマップウィンドウを更新しようとし、MXDはジオプロセシング履歴パネルで実行するすべてのツールを記録しています。IDEで実行する場合、これらの隠れた影響は発生しません。

したがって、ループをわずか1000回実行すると、MXDは1000個のログを保存します。ArcMapはクローズドプロプライエタリソフトウェアであるため、処理ログを記録する仕組みが実際にどのように進行しているかはわかりません。また、使用したデータ構造が大規模な繰り返しを処理できないため、レート制限のステップになる可能性があります。

もう1つの問題は、ArcMapがイベントドリブンアプリケーションであり、イベントが発生したときに発生し、マップをパンしてマップを更新し、データを追加してボタンを有効にすることです。ツールがあらゆる種類のイベントを発生させ、ツールが繰り返し使用されると、アプリケーションがそれらに「圧倒される」可能性があると思いますが、それは私が推測していることですか?

スクリプトをスクリプトツールとして公開すると、ArcMap環境で、特にパワーのないユーザーでも簡単に使用できるようになり、長所と短所を上げる必要があると思います。コードを採用したい場合、これは重要な問題です。中間品質管理を行わずに、自分だけでハードコア数を計算してから、スクリプトを好みのIDEで実行します。

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