Arcpy 脚本以前快现在慢?

Sel*_*lim 1 python ide arcpy

问题几乎概括了这一点。今天早些时候我在 PyCharm 中运行了以下脚本:

rasterfolder = "F:/1_Raster_Processing/Classified/"
vectorfolder = "H:/Output/SplitShapes/"
tablefolder = "H:/Output/Split_Tables_3/"


import arcview
import arcpy
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")


arcpy.env.workspace = vectorfolder
flist = arcpy.ListFeatureClasses()
for f in flist:
    TabulateArea(f,"FID",rasterfolder + "KNN100_" + f[:-6] + ".tif","Value",tablefolder + f[:-4] + ".dbf",0.25)
Run Code Online (Sandbox Code Playgroud)

一个要素类大约需要 4 分钟,并且有几百个要素类需要运行。在一天中间的某个时刻,该进程挂起并且不再生成任何输出,因此我终止了它并重新开始(认为这是 pyCharm 问题)。当我重新开始时,每个要素类突然需要大约 1 小时以上才能执行完全相同的过程。我已经在 WingIDE 中尝试了相同的过程,但仍然遇到问题。我已经重新启动了所有内容,并且除了这台机器上的这个进程之外什么都不运行。想法?我需要在这里牺牲一只牲口吗?winRar 需要付费吗?

其他人在运行脚本时是否遇到过问题?前几次运行得很好,但突然间,没有明显的原因,速度大幅减慢?

Sel*_*lim 5

好的。不确定这是否值得被否决,因为这是一个有效的问题,但对于所有 -1 的问题:这是一个合法的问题,我能够在几台不同的机器上在 arcpy 中一致地重现。因此,如果您一直试图弄清楚arcpy 脚本的处理时间变化很大,请继续阅读。

事实证明,该TabulateArea函数发生了合法的内存泄漏问题。尝试在循环中添加类似的内容for

arcpy.env.workspace = 'in_memory' #Outside the loop

arcpy.Delete_management("in_memory") #after the function completes
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。让我疯狂了好几天试图弄清楚这一点。