解除对要素类的锁定


11

当我尝试删除要素类时,在使用使用相同要素类的Arcgis引擎应用程序后或使用过程中,出现关于锁的错误,因此在重新启动计算机之前无法使用该锁。

我想知道一种使用arcpy或arcobjects 10.1删除锁的方法,如果我能在也可以锁定地理数据库的arcengine应用中使用锁,那将是完美的选择,我在SE中看到过有关锁的不同文章,但没人它们提供了使用ArcObjects释放锁的解决方案。


1
不久前,我也有类似的问题(gis.stackexchange.com/q/28977/8104)。尽管有关于删除内存对象的良好信息,但我找不到有关锁的答案。
亚伦

Answers:


12

如果您使用的是Arcpy脚本,则10.1的数据锁定问题将变得更加棘手。

如果锁是由您的代码创建的,那么您就不会自己清理。释放对要素类,工作空间,光标等的所有引用。当您没有对被锁定对象的更多引用时,将删除锁定。

好吧,这就是它应该起作用的方式,但是很少起作用。通常,代码偶尔会起作用,但在不同地方常常会莫名其妙地崩溃。

问题似乎是锁只是“停了一会儿”,但是代码的运行速度比删除锁的速度快得多。但是,某些内置的Arc工具似乎强制按需清除锁定(由于锁定一次应用于所有GDB,因此锁定将阻止您使用任何包含的要素类)。这些工具是arcpy.Compact_management()和arcpy.Exists()。

这是我在代码中使用的一个小功能,该功能大大提高了可靠性(对于在其中创建和编辑多个GDB和要素类的脚本):

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

只需将工作空间(GDB)路径传递给函数即可使用它,并且应在对工作空间(即创建GDB)或工作空间内的要素类(例如,游标,添加字段,计算等)进行每次操作之后执行。 。例如(此处显示为一个独立的脚本,该函数位于顶部;要使用该函数,请复制该函数并将其粘贴在导入和实际程序之间,如下所示):

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....

3
如果有锁,则Compact不起作用。当您运行FGDB的许多操作时,确实会提高性能,但要以其自身的运行时为代价。
Michalis Avraam

只是想知道为什么存在两次,我的意思是如果clearWSLocks中的all()中的第三条语句?
makak '16

我可以同意,我还没有找到清除锁的方法。:(到目前为止,我已经尝试了许多不同的方法
。– Vidar


7

如果锁是由您的代码创建的,那么您就不会自己清理。释放对要素类,工作空间,光标等的所有引用。当您没有对被锁定对象的更多引用时,将删除锁定。


1
我知道这个线程已经很老了,但是我无法在arcpy中删除FGDB时遇到了问题。“释放对要素类,工作空间,光标等的所有引用”到底是什么意思。我将如何发布上述参考资料?
GeoJohn
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.