Bir özellik sınıfını silmeye çalıştığımda, sonra veya aynı özellik sınıfını kullanan bir Arcgis motor uygulamasının kullanımı sırasında kilitle ilgili bir hata aldım, bu yüzden bilgisayarı yeniden başlatana kadar bu kilide binemiyorum.
ben arcpy veya arcobjects 10.1 kullanarak kilitleri kaldırmak için bir yol bilmek istiyorum, ben de geodatabase kilitler arcengine uygulaması içinde kilit binmek alabilir, mükemmel olurdu kilitleri hakkında SE farklı mesajlar gördüm ama hiç kimse bunlardan biri ArcObjects kullanarak ücretsiz kilitlere çözüm sağlar.
Bir süre önce benzer bir sorum vardı ( gis.stackexchange.com/q/28977/8104 ). Bellek nesnelerinde silme hakkında iyi bilgiler olmasına rağmen kilitler hakkında bir cevap bulamadım.
Arcpy komut dosyası kullanıyorsanız, veri kilidi sorunları 10.1 ile daha da sorunlu hale geldi .
Kilitler kodunuz tarafından oluşturuluyorsa, kendiniz temizlemezsiniz. Özellik sınıflarına, çalışma alanlarına, imleçlere vb. İlişkin tüm başvuruları serbest bırakın. Kilitlenen nesnelere artık başvurunuz olmadığında kilitler kaldırılır.
Peki, bu şekilde çalışması gerekir, ancak nadiren çalışır. Genellikle bir kod zaman zaman çalışır, ancak genellikle farklı yerlerde açıklanamaz şekilde kilitlenir.
Sorun, kilitlerin orada bir süre `` bir süreliğine '' kalması gibi görünüyor, ancak kod, kilitlerin kaldırılma hızından çok daha hızlı çalışıyor. Bununla birlikte, dahili Arc araçlarından bazıları kilitleri isteğe bağlı olarak temizlenmeye zorlamaktadır (kilitler tüm GDB'lere aynı anda uygulandığından, bir kilit, içerilen Özellik Sınıflarından herhangi biriyle çalışmanızı engelleyecektir). Bu araçlar arcpy.Compact_management () ve arcpy.Exists () şeklindedir.
Kodum içinde güvenilirliği önemli ölçüde arttıran küçük bir işlev var (içinde birden fazla GDB ve Özellik Sınıfı oluşturan ve düzenleyen bir komut dosyası için):
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...'% inputWSelse:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWS
Sadece çalışma alanı (GDB) yolunu işleve geçirerek kullanılır ve çalışma alanındaki her işlemden sonra (yani GDB oluşturma) veya çalışma alanındaki Özellik Sınıflarında (yani İmleçler, alan ekleme, hesaplamalar vb.) Yapılmalıdır. . Örneğin (burada üstte işlev bulunan bağımsız bir komut dosyası olarak gösterilir; işlevi kullanmak için kopyalayın ve burada gösterildiği gibi içe aktarmalar ve gerçek program arasına yapıştırın):
import arcpydef 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...'% inputWSelse:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWSGDBpath='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....
Kilitler kodunuz tarafından oluşturuluyorsa, kendiniz temizlemezsiniz. Özellik sınıflarına, çalışma alanlarına, imleçlere vb. İlişkin tüm başvuruları serbest bırakın. Kilitlenen nesnelere artık başvurunuz olmadığında kilitler kaldırılır.
Bu iş parçacığı oldukça eski olduğunu biliyorum, ama arcpy içinde bir FGDB silmek mümkün olan bir sorun yaşıyorum. "Özellik sınıflarına, çalışma alanlarına, imleçlere vb. İlişkin tüm başvuruları serbest bırak" ile tam olarak ne demek istersiniz? Söz konusu referansları salıvermeye nasıl giderim?