Kiedy próbuję usunąć klasę funkcji, po lub podczas korzystania z aplikacji silnika Arcgis, która korzysta z tej samej klasy funkcji, pojawia się błąd dotyczący blokady, więc nie mogę uruchomić tej blokady, dopóki nie uruchomię ponownie komputera.
chciałbym poznać sposób usuwania zamków za pomocą arcpy lub arcobjects 10.1, byłoby idealnie, gdybym mógł jeździć zamkiem w aplikacji arcengine, która również blokuje geobazę, widziałem różne posty w SE na temat zamków, ale nikt nie z nich daje rozwiązanie darmowych blokad za pomocą ArcObjects.
Jakiś czas temu miałem podobne pytanie ( gis.stackexchange.com/q/28977/8104 ). Nie udało mi się znaleźć odpowiedzi na temat blokad, chociaż były dobre informacje na temat usuwania obiektów pamięci.
Jeśli używasz skryptów Arcpy, problemy z blokadą danych stały się jeszcze bardziej problematyczne w 10.1.
Jeśli blokady są tworzone przez Twój kod, to nie czyścisz po sobie. Zwolnij wszystkie odwołania do klas obiektów, obszarów roboczych, kursorów itp. Blokady są usuwane, gdy nie ma już żadnych odniesień do blokowanych obiektów.
Cóż, tak to powinno działać, ale rzadko tak jest. Zwykle kod działa od czasu do czasu, ale często ulega awarii w niewytłumaczalny sposób w różnych miejscach.
Problem wydaje się polegać na tym, że zamki pozostają tam „na chwilę”, ale kod działa znacznie szybciej niż prędkość, z jaką zamki są usuwane. Jednak niektóre z wbudowanych narzędzi Arc wydają się wymuszać usuwanie blokad na żądanie (ponieważ blokady dotyczą wszystkich całych GDB naraz, blokada uniemożliwi pracę z dowolną zawartą klasą funkcji). Te narzędzia to arcpy.Compact_management () i arcpy.Exists ().
Oto mała funkcja, której używam w moim kodzie, która ma radykalnie zwiększoną niezawodność (dla skryptu, który tworzy i edytuje wiele GDB i klas funkcji w nich zawartych):
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
Służy do tego po prostu przekazując ścieżkę obszaru roboczego (GDB) do funkcji i należy go wykonać po każdej operacji w obszarze roboczym (tj. Tworzenie GDB) lub klasach funkcji w obszarze roboczym (tj. Kursory, dodawanie pól, obliczenia itp.) . Na przykład (pokazany tutaj jako samodzielny skrypt, z funkcją u góry; aby użyć funkcji, skopiuj go i wklej między importem a rzeczywistym programem, jak pokazano tutaj):
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....
Kompakt nie działa, jeśli jest zamek. Rzeczywiście zwiększy wydajność, gdy uruchomisz wiele operacji FGDB, ale kosztem własnego środowiska wykonawczego.
Proponowane rozwiązanie przez @StacyR będzie działać w każdych warunkach z wyjątkiem ekskluzywnych zamków edycyjnych (ED), zgodnie z ArcGIS dokumentacji pomocy.
Jeśli blokady są tworzone przez Twój kod, to nie czyścisz po sobie. Zwolnij wszystkie odwołania do klas obiektów, obszarów roboczych, kursorów itp. Blokady są usuwane, gdy nie ma już żadnych odniesień do blokowanych obiektów.
Wiem, że ten wątek jest dość stary, ale mam problem z usunięciem FGDB w Arcpy. Co dokładnie rozumiesz przez „Uwolnij wszystkie odniesienia do klas obiektów, obszarów roboczych, kursorów itp.” Jak miałbym zacząć wypuszczać wspomniane referencje?
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.