동일한 기능 클래스를 사용하는 Arcgis 엔진 앱을 사용한 후 또는 사용하는 동안 기능 클래스를 삭제하려고하면 잠금과 관련된 오류가 발생하여 컴퓨터를 다시 시작할 때까지이 잠금을 탈 수 없습니다.
arcpy 또는 arcobjects 10.1을 사용하여 잠금을 제거하는 방법을 알고 싶습니다. 지오 데이터베이스를 잠그는 arcengine 앱 내부에서 잠금을 탈 수 있다면 완벽합니다 .SE에 잠금에 대해 다른 게시물을 보았지만 아무도 없습니다. 그중 ArcObject를 사용하여 잠금을 해제하는 솔루션을 제공합니다.
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....