Answers:
如果您使用的是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种类型的锁。
该建议的解决方案通过@StacyR将适用于所有情况,除了独占根据ArcGIS的帮助文档编辑锁(ED)。
http://help.arcgis.com/zh-CN/arcgisdesktop/10.0/help/index.html#//003n0000007t000000