Czy ktoś badał różnicę w uruchamianiu skryptu Python w ArcToolbox w porównaniu z samodzielnym skryptem? Musiałem napisać szybki i brudny skrypt, aby przekonwertować zestaw obrazów RGB na pojedyncze pasmo, wyodrębniając pasmo 1. Jako samodzielny skrypt odczytujący i zapisujący na komputerze PC przetwarza 1000 obrazów o identycznych rozmiarach w około 350 sekund. Uruchomienie tego samego skryptu z ArcToolbox zajmuje około 1250 sekund.
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()])
Dodałem trochę kodu do śledzenia, kiedy każdy kafelek kończy przetwarzanie, i wyeksportowałem wyniki jako CSV. Konwersja czasu zakończenia na czas przetwarzania występuje w programie Excel. Na wykresach wyników czas przetwarzania jest mniej więcej taki sam dla każdego kafelka jako skryptu, ale czas przetwarzania wzrasta liniowo, gdy jest uruchamiany jako narzędzie ArcGIS.
Jeśli dane odczytują i zapisują dane na urządzeniu sieciowym, wzrost wydaje się być wykładniczy.
Nie szukam alternatywnych sposobów na wykonanie tego konkretnego zadania. Chcę zrozumieć, dlaczego wydajność tego skryptu zmniejsza się z czasem, gdy jest uruchamiany jako narzędzie ArcGIS , ale nie jako samodzielny skrypt. Zauważyłem to zachowanie również w przypadku innych skryptów.