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.
Odpowiedzi:
Oto moje zdanie: uruchomienie skryptu z ArcToolbox wiąże się z różnego rodzaju ukrytymi kosztami, ponieważ narzędzia próbują wchodzić w interakcję / aktualizować główną aplikację (ArcMap). Wszystkie narzędzia zaktualizują metadane, niektóre próbują odświeżyć okno mapy, a MXD rejestruje każde narzędzie uruchamiane w panelu historii geoprzetwarzania. Żaden z tych ukrytych wpływów nie występuje podczas działania w środowisku IDE.
Zatem uruchomienie pętli zaledwie 1000 razy oznacza, że MXD przechowuje 1000 dzienników. Ponieważ ArcMap jest zamkniętym, zastrzeżonym oprogramowaniem, nie mamy pojęcia, jak naprawdę działa mechanika rejestrowania dzienników przetwarzania i może być krokiem ograniczającym szybkość, czy zastosowana przez nich struktura danych nie jest w stanie poradzić sobie z dużą powtarzalnością?
Innym problemem może być to, że ArcMap jest aplikacją sterowaną zdarzeniami, rzeczy dzieją się, gdy zdarzają się zdarzenia, przesuwasz mapę i mapa odświeża się, dodajesz dane i włącza się przycisk. Wydaje mi się, że możliwe jest, że narzędzia odpalają wszelkiego rodzaju zdarzenia, a aplikacja „przytłacza” je, gdy narzędzia są używane w sposób powtarzalny, ale czy to jest moje spekulacje?
Myślę, że trzeba podnieść zalety i wady, ujawnienie skryptu jako narzędzia skryptowego ułatwia korzystanie z niego w środowisku ArcMap, szczególnie dla użytkowników bez mocy. To ważna kwestia, jeśli chcesz, aby Twój kod został przyjęty. Hardcorowe crunchowanie liczb przez Ciebie bez potrzeby przeprowadzania pośredniej kontroli jakości, a następnie uruchom skrypt w preferowanym środowisku IDE.
źródło