Quando provo a eliminare una classe di funzionalità, dopo o durante l'utilizzo di un'app del motore Arcgis che utilizza la stessa classe di funzionalità, viene visualizzato un errore relativo al blocco, quindi non riesco a utilizzare questo blocco finché non riavvio il computer.
vorrei sapere un modo per rimuovere i blocchi usando arcpy o arcobjects 10.1, sarebbe perfetto se riesco a cavalcare il blocco all'interno dell'app arcengine che blocca anche il geodatabase, ho visto diversi post in SE sui blocchi ma nessuno di questi fornisce la soluzione per bloccare gratuitamente usando ArcObjects.
Ho avuto una domanda simile qualche tempo fa ( gis.stackexchange.com/q/28977/8104 ). Non sono riuscito a trovare una risposta sui blocchi, anche se c'erano buone informazioni sull'eliminazione negli oggetti di memoria.
Se si utilizza lo scripting Arcpy, i problemi di blocco dei dati sono diventati ancora più problematici con 10.1.
Se i blocchi vengono creati dal tuo codice, allora non stai pulendo dopo te stesso. Rilasciare tutti i riferimenti a classi di funzioni, aree di lavoro, cursori, ecc. I blocchi vengono rimossi quando non si hanno più riferimenti agli oggetti bloccati.
Bene, è così che dovrebbe funzionare, ma raramente lo fa. Di solito un codice funzionerà di tanto in tanto, ma spesso si blocca inspiegabilmente in luoghi diversi.
Il problema sembra essere che i blocchi vengono lasciati lì seduti `per un po ', ma il codice viene eseguito molto più velocemente della velocità con cui i blocchi vengono rimossi. Tuttavia, alcuni degli strumenti Arc integrati sembrano forzare la cancellazione dei blocchi su richiesta (poiché i blocchi si applicano a interi GDB contemporaneamente, un blocco ti impedirà di lavorare con una qualsiasi delle Classi di funzioni contenute). Questi strumenti sono arcpy.Compact_management () e arcpy.Exists ().
Ecco una piccola funzione che uso nel mio codice che ha notevolmente aumentato l'affidabilità (per uno script che crea e modifica più GDB e classi di caratteristiche al loro interno):
def clearWSLocks(inputWS):'''Attempts to clear locks on a workspace, returns stupid message.'''if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):return'Workspace (%s) clear to continue...'% inputWS
else:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWS
Viene utilizzato semplicemente passando il percorso dell'area di lavoro (GDB) alla funzione e dovrebbe essere eseguito dopo ogni operazione sull'area di lavoro (ad es. Creazione GDB) o Classi di caratteristiche all'interno dell'area di lavoro (ad es. Cursori, aggiunta di campi, calcoli, ecc.) . Ad esempio (mostrato qui come uno script autonomo, con la funzione in alto; per usare la funzione, copiarlo e incollarlo tra le importazioni e il programma effettivo, come mostrato qui):
import arcpy
def clearWSLocks(inputWS):'''Attempts to clear locks on a workspace, returns stupid message.'''if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):return'Workspace (%s) clear to continue...'% inputWS
else:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWS
GDBpath='C:/Temp/'GDBname='Test.gdb'
tableName ='SweetFC'
arcpy.CreateFileGDB_management(GDBpath,GDBname)print(clearWSLocks(GDBpath+GDBname))
arcpy.CreateTable_management(GDBpath+GDBname, tableName)print(clearWSLocks(GDBpath+GDBname))# etc....
Compatto non funziona se è presente un lucchetto. Aumenterà davvero le prestazioni quando si eseguono molte operazioni di un FGDB, ma a costo del suo tempo di esecuzione.
La soluzione proposta da @StacyR funzionerà in tutte le situazioni ad eccezione dei blocchi di modifica esclusivi (ED) secondo la documentazione della guida di arcgis.
Se i blocchi vengono creati dal tuo codice, allora non stai pulendo dopo te stesso. Rilasciare tutti i riferimenti a classi di funzioni, aree di lavoro, cursori, ecc. I blocchi vengono rimossi quando non si hanno più riferimenti agli oggetti bloccati.
So che questo thread è piuttosto vecchio, ma ho un problema con la possibilità di eliminare un FGDB in arcpy. Cosa intendi esattamente con "Rilascia tutti i riferimenti a classi di funzioni, aree di lavoro, cursori, ecc." Come farei per rilasciare questi riferimenti?
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.