作为ArcGIS工具的Python脚本性能与独立版本相比


11

有没有人研究过在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 Tool运行时,处理时间呈线性增加。

在此处输入图片说明

如果数据读取和写入到网络设备,则增加似乎是指数级的。

我不是在寻找完成此特定任务的替代方法。我想了解一下,当作为ArcGIS工具而不是独立脚本运行时,为什么此脚本的性能会随时间降低。我也注意到其他脚本的这种行为。


1
ArcGIS外部的python更快。我只在执行非常简单的脚本时才使用python窗口,或者希望将项目拖放到终端中。我的猜测是ArcGIS终端控制解释器的资源分配,因为整个软件包还需要python才能操作。
atxgis

我的建议(根据我的经验,而不是像您一样提供量化的性能数据)是仅将arcpy作为最后的选择。在上面的例子中,没有任何ArcPy中python解释是相当能够高效筛选用于栅格的目录并将其复制到新文件夹
保罗ħ

1
x64背景地理处理和32位进程内处理之间有多少区别?
柯克·库肯达尔

当您说“正在ArcToolbox中运行Python脚本”时,是否意味着您正在运行Python脚本工具?如果是这样,您是否在没有测试参数的情况下运行它?
PolyGeo

@PolyGeo是的,我在ArcGIS工具箱中创建了一个脚本工具。它采用了1个参数,从中导出了in_folder和out_folder。这些都是在时序测量开始之前完成的。
比约恩

Answers:


1

这是我的事:在ArcToolbox中运行脚本会招致各种隐藏成本,因为工具正在尝试交互/更新主应用程序(ArcMap)。所有工具都会更新元数据,有些会尝试刷新地图窗口,而MXD会记录您在地理处理历史记录面板中运行的每个工具。在IDE中运行时,这些隐藏影响均不会发生。

因此,仅运行1000次循环就意味着MXD正在存储1000条日志。由于ArcMap是封闭的专有软件,因此我们不知道记录处理日志的机制实际上是如何进行的,可能限速步骤是他们采用的数据结构不能处理大量重复吗?

另一个问题是ArcMap是事件驱动的应用程序,事件发生时会发生事情,平移地图,刷新地图,添加数据并启用按钮。我猜可能是工具引发了各种各样的事件,并且当重复使用工具时,应用程序会被它们“淹没”,但这是我的猜测吗?

我认为必须提高优缺点,将脚本公开为脚本工具可以使它易于在ArcMap环境中使用,特别是对于非高级用户。如果您想采用自己的代码,这是一个重要的问题。无需进行任何中间质量控制,您就可以轻松处理硬核号码,然后在您首选的IDE中运行脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.