6 votos

Script de ArcPy de pausa hasta que la cerradura de la clase de función desaparece

Mi script necesita para copiar los datos en una clase de entidad en una geodatabase SDE que puede tener un bloqueo de otra aplicación. Yo no debería romper el bloqueo (que aplicación tiene prioridad sobre una actualización de datos), pero tampoco quiero ser la secuencia de comandos para dejar de fumar sólo porque se trató en el momento equivocado.

¿Cómo puedo configurarlo para que seguir intentando hasta que no hay bloqueo? Estoy buscando algo como un try/except, sino más bien como tratar/keep-tratando cada 15 segundos.

He pensado en hacer una función específica, y la adición de una pausa:

try:
    funcCopyData()
except:
    pause 10 seconds
    funcCopyData()

pero no esta todavía se me limita a sólo dos intentos?

9voto

Ron Warholic Puntos 7479

Ok, vamos a empezar con este no soy un experto en python, por lo que hay probablemente mucho más eficientes maneras de lograr esto, pero... el primer pensamiento que viene a mí, sería tal vez algo a lo largo de las líneas de la siguiente (pseudo código de abajo)

while success != True:
  funcCopyData()

def funcCopyData():
  try
    ...
    ...
    global var success = True
  except
    pause 10 sec

No sé si funcionaría correctamente o no, ya que no sé si la excepción podría escapar del bucle while... pero espero que al menos te da un pensamiento.

O usted puede mirar en el TestSchemaLock función y probar algo a lo largo de las líneas de

import arcpy, time
lockTest = arcpy.TestSchemaLock(featureClass)

while lockTest != True:
  time.sleep(10)
  lockTest = arcpy.TestSchemaLock(featureClass)

funcCopyData()

def funcCopyData():
  ...
  ...

Nunca he usado la TestSchemaLock aunque, por lo que no hacemos ninguna garantía, pero suena como que podría satisfacer lo que usted está necesitando.

Espero que ayude, modificaciones/correcciones de bienvenida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X