He escrito este script que se reproduce a través de todas las clases de entidad en un conjunto dado de la función de los conjuntos de datos y elimina todas sus características. Él aparece para hacer el trabajo, pero se ejecuta muy lentamente. Hay algo que estoy haciendo mal aquí o hay alguna manera obvia para acelerar las cosas?
Estoy usando DeleteFeatures_management para hacer la escritura. DeleteRows_management también parece funcionar.
import sys
import os
import arcpy
from arcpy import env
import datetime
import getpass
try:
passwd = getpass.getpass("Enter the sde user password: ")
sdeConnectionFileDir = os.environ.get("TEMP")
databaseName = ""
fileName = "temp.sde"
# Delete any pre-existing SDE connection file.
fullPath = sdeConnectionFileDir + '\\' + fileName
if os.path.exists(fullPath):
os.remove(fullPath)
# Create temporary SDE connection file.
arcpy.CreateArcSDEConnectionFile_management (
sdeConnectionFileDir, fileName,
"sdeserver", "5151", "",
"DATABASE_AUTH", "my_sde_user", passwd,
"SAVE_USERNAME", "SDE.DEFAULT", "SAVE_VERSION"
)
env.workspace = fullPath
# ArcPy status codes.
returnCodes = {'WARN' : 0, 'INFO' : 1, 'ERROR' : 2}
featureDatasets = []
featureDatasets.extend(arcpy.ListDatasets("dataset1*"))
featureDatasets.extend(arcpy.ListDatasets("dataset2*"))
featureDatasets.extend(arcpy.ListDatasets("dataset3*"))
list = '[%s]' % ', '.join(map(str, featureDatasets))
response = raw_input("\n***** WARNING!!! ***** \nAll data will be deleted from all feature classess in the following datasets: \n\n" + list + "\n\n |--> Type DELETE to begin removal: ")
if response == "DELETE":
print "\nStarted: " + str(datetime.datetime.now()) + "\n"
for dataset in featureDatasets:
print "Processing dataset: " + dataset
for fc in arcpy.ListFeatureClasses("*", "ALL", dataset):
rowCount = int(arcpy.GetCount_management(fc).getOutput(0))
if rowCount > 0:
print " -- Processing feature class: " + str(fc) + " (" + str(rowCount) + " rows)"
#arcpy.DeleteRows_management(fc)
arcpy.DeleteFeatures_management(fc)
print "\nCompleted: " + str(datetime.datetime.now())
except Exception as e:
if arcpy:
arcpyErrors = arcpy.gp.getMessages(returnCodes['ERROR'])
if arcpyErrors:
sys.stderr.write(arcpyErrors + "\n")
sys.stderr.write(str(e) + "\n")
sys.exit(1)
EDITAR --
Os pongo algunas de rendimiento de temporizadores en el script y he aquí los datos:
- El tiempo para recuperar conjuntos de datos: 0:00:01.254000
- Total De Clases De Entidad: 1682
- Total de Clases de entidad con los Datos: 124
- Total De Funciones De Procesado: 190222
- Tiempo Total: 3 horas, 16 minutos
El desglose:
Característica del conjunto de datos --> lista de clase de entidad de llamadas:
* AVG 0:00:02
* MIN 0:00:01
* MAX 0:00:07
* COUNT 40
* TOTAL 0:01:08
Función de conteo de llamadas (la mayoría del tiempo):
* AVG 0:00:06
* MIN 0:00:01
* MAX 0:00:16
* COUNT 1682
* TOTAL 2:41:00
Función de eliminación de llamadas (reducido debido a que sólo las clases de entidad con filas se procesan):
* AVG 0:00:17
* MIN 0:00:02
* MAX 0:03:22
* COUNT 124
* TOTAL 0:34:31