Wydajność skryptu w języku Python jako narzędzie ArcGIS w porównaniu do samodzielnego działania


11

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.

wprowadź opis zdjęcia tutaj

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.


1
Python poza ArcGIS jest znacznie szybszy. Korzystam z okna Pythona tylko podczas wykonywania bardzo prostych skryptów lub oczekuję możliwości przeciągania i upuszczania elementów do terminala. Domyślam się, że terminal ArcGIS kontroluje alokację zasobów interpretera, ponieważ cały pakiet oprogramowania potrzebuje również Pythona do działania.
atxgis

moje zalecenie (oparte na moim doświadczeniu, a nie ilościowych danych o wydajności, tak jak podałeś), to stosowanie arcpy jako ostateczności. W powyższym przykładzie każdy interpreter Pythona bez arkpy jest w stanie skutecznie filtrować katalog dla rastrów i kopiować je do nowego folderu
Paul H

1
Jaka jest różnica między geoprocesorem w tle x64 a 32-bitowym procesem?
Kirk Kuykendall

Kiedy mówisz, że „uruchamiasz skrypt Python w ArcToolbox”, masz na myśli, że korzystasz z narzędzia Python Script? Jeśli tak, czy uruchamiasz go bez parametrów do testu?
PolyGeo

@PolyGeo tak, stworzyłem narzędzie skryptowe w przyborniku ArcGIS. Zajęło to 1 parametr, z którego pochodzą katalog_folder i folder_folder. Wszystko to odbywa się przed rozpoczęciem pomiaru czasu.
Bjorn,

Odpowiedzi:


1

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.