Производительность скрипта Python как инструмента ArcGIS по сравнению с автономным

11

Кто-нибудь изучал разницу в запуске скрипта Python в ArcToolbox по сравнению с автономным скриптом? Мне пришлось написать быстрый и грязный сценарий, чтобы преобразовать набор изображений RGB в одну полосу путем выделения полосы 1. В качестве автономного сценария, считывающего и записывающего на мой компьютер, он обрабатывает 1000 изображений одинакового размера примерно за 350 секунд. Запуск того же скрипта из 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 , а не как отдельного скрипта. Я заметил это поведение и с другими скриптами.

Bjorn
источник
1
Python вне ArcGIS намного быстрее. Я использую окно python только при выполнении очень простых сценариев или хочу перетаскивать элементы в терминал. Я думаю, что терминал ArcGIS контролирует распределение ресурсов интерпретатора, поскольку весь программный пакет также нуждается в python для работы.
atxgis
Моя рекомендация (исходя из моего опыта, а не количественных данных о производительности, как вы предоставили), состоит в том, чтобы использовать arcpy только в качестве последнего средства. В приведенном выше примере любой интерпретатор Python без arcpy вполне способен эффективно фильтровать каталог для растров и копировать их в новую папку
Пол Х
1
Какова разница между фоновой геообработкой x64 и 32-битным в процессе?
Кирк Куйкендалл
Когда вы говорите, что «запускаете скрипт Python в ArcToolbox», вы имеете в виду, что вы запускаете инструмент Python Script? Если да, запускаете ли вы его без параметров для теста?
PolyGeo
@PolyGeo да, я создал инструмент-скрипт в наборе инструментов ArcGIS. Потребовался 1 параметр, из которого получены in_folder и out_folder. Это все сделано до начала измерения времени.
Бьорн,

Ответы:

1

Это мое мнение: запуск скрипта из ArcToolbox влечет за собой всевозможные скрытые расходы, поскольку инструменты пытаются взаимодействовать / обновлять основное приложение (ArcMap). Все инструменты будут обновлять метаданные, некоторые пытаются обновить окно карты, и MXD записывает все инструменты, которые вы запускаете на панели истории геообработки. Ни одно из этих скрытых воздействий не возникает при работе в IDE.

Таким образом, выполнение цикла всего 1000 раз означает, что MXD хранит 1000 журналов. Поскольку ArcMap является закрытым проприетарным программным обеспечением, мы не имеем представления о том, как на самом деле работает механизм обработки записей журналов, и может ли быть шагом ограничения скорости, если используемая структура данных не способна обрабатывать большие повторения?

Другая проблема может быть связана с тем, что ArcMap является приложением, управляемым событиями, события происходят, когда происходят события, вы перемещаете карту и карта обновляется, вы добавляете данные и включаете кнопку. Я предполагаю, что возможно, что инструменты запускают все виды событий, и приложение становится «перегруженным» ими, когда инструменты используются неоднозначно, но это я догадываюсь?

Я думаю, что нужно разобраться в плюсах и минусах, выставив скрипт как инструмент для скриптов, что облегчает его использование в среде ArcMap, особенно для неопытных пользователей. Это важный вопрос, если вы хотите, чтобы ваш код был принят. Хардкорное число только для вас, без необходимости какого-либо промежуточного контроля качества, затем запустите сценарий в предпочитаемой вами IDE.

Hornbydd
источник