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ツールとして実行すると時間とともに低下する理由を理解したいと思います。他のスクリプトでもこの動作に気づきました。